AI 代码转换怎么做?先定义行为测试,再把 Python 函数迁移到 TypeScript

用行为测试约束 AI 辅助的 Python 到 TypeScript 迁移,并验证正常值、边界值与非法输入。

把 Python 代码改成 TypeScript 时,先锁定输入、输出、异常和边界,再让 AI 转换。逐行改写很容易漏掉隐含行为:Python 类型提示默认不在运行时强制,JavaScript 的数字又能表示小数;只看“能编译”不能证明新旧逻辑一致。

用行为表约束转换范围

示例任务是把一个 0 到 100 的整数映射为等级:小于 40 为 low,40 到 69 为 mid,70 到 100 为 high;小数、布尔值和范围外数值都拒绝。这个例子只用于演示迁移方法,不代表在某个线上项目测试过。

AI 代码转换怎么做?先定义行为测试,再把 Python 函数迁移到 TypeScript

输入 预期结果 要检查的边界
39 low 40 以下
40 mid 下边界包含
69 mid 70 以下
70、100 high 上档起点与最大值
-1、101、40.5、true 报错 非法输入

原始 Python 逻辑先固定下来:type(score) is int 用来排除布尔值,因为 Python 中布尔类型与整数有继承关系;然后检查范围并按两个阈值返回结果。

def score_band(score: int) -> str:
    if type(score) is not int or not 0 <= score <= 100:
        raise ValueError("score must be an integer from 0 to 100")
    if score >= 70:
        return "high"
    if score >= 40:
        return "mid"
    return "low"

先让 AI 说明语义,再生成目标代码

把原函数、调用方和行为表一起提供,并要求模型先指出 Python 特有行为与迁移假设。提示词可以这样写:

请把下面的 Python 函数迁移到 TypeScript。
保持输入检查、返回字符串和错误边界不变;不要添加依赖。
先列出 Python 与 TypeScript 的语义差异,再给出代码和覆盖 39、40、69、70、100、-1、101、40.5、true 的测试。
如果原代码没有定义某个行为,请先提问,不要自行补业务规则。

迁移后的实现示例:

type Band = 'low' | 'mid' | 'high';

function scoreBand(score: number): Band {
  if (!Number.isInteger(score) || score < 0 || score > 100) {
    throw new RangeError('score must be an integer from 0 to 100');
  }
  if (score >= 70) return 'high';
  if (score >= 40) return 'mid';
  return 'low';
}

for (const score of [39, 40, 69, 70, 100]) {
  console.log(score, scoreBand(score));
}

这段示例的预期输出依次是 39 low、40 mid、69 mid、70 high、100 high。对非法输入还应断言函数抛出错误。TypeScript 的联合类型能限制返回值集合,但类型本身不会替你验证外部输入,所以 Number.isInteger 和范围检查仍需保留。

尤其要覆盖 Python 布尔值与 TypeScript 外部输入的差异:Python 的 bool 是 int 的子类,而 TypeScript 函数签名在编译后不会校验运行时值。可把 true 作为未知输入传入并断言拒绝:

const invalid: unknown[] = [-1, 101, 40.5, true, '40'];
for (const value of invalid) {
  let rejected = false;
  try {
    scoreBand(value as number);
  } catch (error) {
    rejected = error instanceof RangeError;
  }
  if (!rejected) throw new Error(`应拒绝非法输入:${String(value)}`);
}

这里的类型断言只绕过编译器以模拟 API、JSON 等外部数据;它不会在运行时转换值。若你的入口接收未知数据,应先校验类型,再调用业务函数。

编译、对照测试,再替换调用方

  1. 把函数放入独立文件,按项目现有配置运行 TypeScript 编译器,例如 npx tsc --strict --noEmit。
  2. 让 Python 原函数和 TypeScript 新函数共享同一组输入向量,逐个比较正常返回值;非法输入分别确认两边都拒绝。
  3. 补充原项目的空值、时区、整数精度、文件路径、异常类型等真实边界。语言转换不自动解决 API、并发、生态库和运行时差异。
  4. 先迁移一个模块并检查调用点与类型,再删除旧实现;不要一边让 AI 重写多个目录一边失去可回退的基线。

什么时候不能直接迁移

涉及 Python 动态属性、生成器、装饰器、NumPy 数组、异步 I/O 或第三方库时,单个函数的对照表不够。先明确目标运行时和替代依赖,保留一组能代表真实调用路径的测试。本文示例没有在你的仓库或目标环境执行;编译和回归结果要以本地项目为准。

官方资料

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/32355.html

赞 (0)
AI小管家的头像AI小管家
AI 生成 SQL 怎么用?从表结构写出查询,再在 SQLite 中验证
上一篇 1小时前
离线 AI 编程助手怎么部署?用 Continue 连接 Ollama 并验证本地补全
下一篇 1小时前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部