我最近开始在Expo上使用TypeScript.我已经完成了所有linter/formatter集成,比如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;
}

是一个典型的打字错误(我相信?)可以在编译时轻松判断.我希望它会导致一个大的红屏错误,构建失败.

我对打字很陌生,所以我可能错过了一些非常重要的东西.到底是什么导致了这种宽大,有没有办法实施更严格的判断?

推荐答案

首先要了解的是,Typescript是Javascript的超集,在本例中,它实际上不会在编译期间进行类型判断.

基本上,Babel只是go 掉Typescript并将其转换为Javascript,然后将其编译成js包.

您可以查看以下Babel文档的第一行以及注意事项:

由于Babel不进行类型判断,语法正确但无法通过类型脚本类型判断的代码可能会成功转换,而且通常会以意外或无效的方式转换.

我的建议是扩展build命令,首先包括tsc或者更确切地说是Typescript编译,并在tsconfig中将noEmit设置为true.

Update:最近,我在一个项目中添加了jesttypescript,发现了另一个例子.在Jest 文档的底部,他们实际上陈述了同样的事情:

https://jestjs.io/docs/en/getting-started#using-typescript

然而,在Babel中使用TypeScript有一些注意事项.因为Babel中的TypeScript支持是透明的,Jest不会在测试运行时进行类型判断.如果你想这样,你可以用tsJest .

React-native相关问答推荐

如何在API调用期间将本地存储(Expressc存储)中的令牌传递到后台

Appcenter构建失败错误号::EEXIST -文件存在于syserr_fail2_in

如何将 react-native 图像从 expo-image-picker 上传到使用 multer 的 Express.js 后端

react-native 根据状态隐藏显示按钮

打开屏幕后自动显示键盘

我应该什么时候调用 realm.close()?

在react-native 模块库中找不到 ios 框架头文件

Firebase JavaScript SDK 和 react-native-firebase 有什么区别

React-Native:Facebook 和 Google 登录

纯在 Swift 中的 React Native 应用程序

React Native:ScrollView 中的 TouchableOpacity onPress 问题

XCode AppIcon 基于方案

将 react-native 元素Bundle 为 iOS 框架或 (.aar) Android 库

react-native run-ios 运行失败: Application is unknown to FrontBoard?

如何在react-native中绘制虚线边框样式

React-Native Invariant Violation:元素类型无效

开始滚动时使 TouchableOpacity 不突出显示元素

React-native google 登录给开发人员错误

react-native如何导入元素根目录?

如何在 React Native 中更改 textInput 占位符的字体系列