从 JS 开始
JS 到 TS 自动转换
- TypeStat (Codecademy 使用)
- TypeWiz
- js-to-ts-converter
- TS-migrate 用于 Airbnb 的转换
- dts-gen -
dts-gen
是一种从任何 JavaScript 对象生成 TypeScript 定义文件(.d.ts)的工具。
用于 JSON - http://json2ts.com/ 从 JSON 生成 TypeScript 接口
JS 到 TS 手动转换
“仅重命名”策略
- OSX/Linux:
find src -name "*.js" -exec sh -c 'mv "$0" "${0%.js}.tsx"' {} \;
您可以使用 webpack 加载 TypeScript 文件,或者使用 tsc
编译器将您的 TS 文件编译成并排的 JS 文件。基本的 tsconfig.json
是
{
"compilerOptions": {
"allowJs": true
}
}
然后您需要启用它来检查 JS
{
"compilerOptions": {
"allowJs": true,
"checkJs": true
}
}
如果您有一个大型代码库并且这会一次性抛出太多错误,您可以使用 //@ts-nocheck
选择退出有问题的文件,或者关闭 checkJs
并向每个常规 JS 文件的顶部添加 //@ts-check
指令。
TypeScript 应该在这里抛出一些明显的错误,这些错误应该很容易修复。
完成后,通过关闭隐式 any
来服用红色药丸
{
"compilerOptions": {
"allowJs": true,
"checkJs": true,
"noImplicitAny": true // or "strict": true
}
}
这将引发大量类型错误,您可以开始将文件转换为 TS 或(可选)在您的 JS 中使用 JSDoc 注释。
这里一个常见的做法是为 any
使用一个环境 TODO 类型别名,以便您可以跟踪需要返回的内容
type TODO_TYPEME = any;
export function myFunc(foo: TODO_TYPEME, bar: TODO_TYPEME): number {
// ...
}
逐渐添加 更多 strict
模式标志,例如 noImplicitThis
、strictNullChecks
等,直到您最终可以在没有 js 文件的情况下以完全严格模式运行
{
"compilerOptions": {
"strict": true
}
}
三步过程
https://speakerdeck.com/amhinson/convert-a-react-native-project-to-typescript-in-10-minutes?slide=23
更多资源
- 大规模采用 TypeScript - Airbnb 的转换故事和策略 - 他们的 ts-migrate 工具在此处
- 来自彭博的 TypeScript 扩展经验
- 将
create-react-app
/react-scripts
应用迁移到 TypeScript - 不要使用react-scripts-ts
- 将弹出的 CRA 应用迁移到 TS
- Lyft 的 JS 到 TS 迁移工具(包括 PropTypes 迁移)
- Hootsuite
- Etsy 迁移到 TypeScript 的历程
- Storybook 的迁移(PR)
- 我们如何将一个 200K+ LOC 项目迁移到 TypeScript 并幸存下来讲述故事 - Coherent Labs - 使用
grunt-ts
、jQuery 和 Kendo UI - 逐步添加严格空值检查 https://vscode.js.cn/blogs/2019/05/23/strict-null
可能过时的旧内容