ana*_*nar 20 typescript reactjs react-native expo
我最近开始在 Expo 中使用 TypeScript。我已经完成了所有的 linter/格式化程序集成,typescript-eslint所以我可以在编码过程中捕获大部分错误。为了检查代码是否编译,我npx tsc每隔一段时间运行一次并进行相应的修复。
我还没有完全理解的一件事是,即使存在大量编译错误,我的应用程序也能成功构建。我希望(并且更喜欢)看到每个编译错误的红屏错误,而不是成功构建应用程序,然后我会发现它。例如,
function square<T>(x: T): T {
console.log(x.length); // error TS2339: Property 'length' does not exist on type 'T'.
return x * x;
}
Run Code Online (Sandbox Code Playgroud)
是一个典型的 TypeScript 错误(我相信?)可以在编译时轻松检查。我希望它导致一个大的红屏错误和构建失败。
我对 TypeScript 很陌生,所以我可能遗漏了一些非常重要的东西。究竟是什么导致了这种宽大处理,有没有办法强制执行更严格的检查?
首先要理解的是,Typescript 是 Javascript 的超集,在这种情况下,它实际上并没有在编译期间进行类型检查。
基本上发生的事情是 Babel 只是剥离了 Typescript 并将其转换为 Javascript,然后将其编译到 js 包中。
您可以查看以下 Babel 文档的第一行以及注意事项:https : //babeljs.io/docs/en/next/babel-plugin-transform-typescript
由于 Babel 不进行类型检查,因此语法正确但无法通过 TypeScript 类型检查的代码可能会成功转换,并且通常以意外或无效的方式进行转换。
我建议将您的构建命令扩展为首先包含tsc或更确切地说是 Typescript 编译,并noEmit在您的 tsconfig.xml 中设置为 true。
更新:我发现了另一个最近在添加jest和添加typescript到项目时适用的实例。在 Jest 文档的底部,他们实际上陈述了同样的事情:
https://jestjs.io/docs/en/getting-started#using-typescript
但是,在 Babel 中使用 TypeScript 有一些注意事项。因为 Babel 中的 TypeScript 支持是转译,所以 Jest 不会在您的测试运行时进行类型检查。如果需要,可以使用 ts-jest。
| 归档时间: |
|
| 查看次数: |
1644 次 |
| 最近记录: |