Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 为什么尽管存在TypeScript编译器错误,我的React本机应用程序还是成功构建?_Reactjs_Typescript_React Native_Expo - Fatal编程技术网

Reactjs 为什么尽管存在TypeScript编译器错误,我的React本机应用程序还是成功构建?

Reactjs 为什么尽管存在TypeScript编译器错误,我的React本机应用程序还是成功构建?,reactjs,typescript,react-native,expo,Reactjs,Typescript,React Native,Expo,我最近开始在Expo中使用TypeScript。我已经完成了所有linter/formatter集成,比如typescript eslint,因此我可以捕获编码过程中的大部分错误。为了检查代码是否编译,我每隔一段时间运行一次npx tsc,并进行相应的修复 有一件事我还没有完全理解,那就是为什么我的应用程序即使存在大量编译错误也能成功构建。我希望(并且更愿意)看到每个编译错误都出现红屏错误,而不是成功构建应用程序,然后让我稍后发现。比如说, function square<T>(x:

我最近开始在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;
}
函数平方(x:T):T{
console.log(x.length);//错误TS2339:类型“T”上不存在属性“length”。
返回x*x;
}
是一个典型的TypeScript错误(我相信?)可以在编译时轻松检查。我希望它会导致一个大的红屏错误和构建失败


我对打字很陌生,所以我可能遗漏了一些非常重要的东西。究竟是什么原因导致了这种宽容?有没有办法强制执行更严格的检查?

首先要了解的是,Typescript是Javascript的超集,在这种情况下,它实际上不会在编译期间接受类型检查

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

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

由于Babel不进行类型检查,因此语法正确但无法通过TypeScript类型检查的代码可能会成功转换,并且通常以意外或无效的方式转换

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

Update:我发现最近在向项目中添加
jest
typescript
时,这一点也适用于另一个实例。在笑话文档的底部,他们实际上陈述了同样的事情:

但是,在Babel中使用TypeScript有一些注意事项。因为Babel中的TypeScript支持是透明的,所以Jest不会在测试运行时进行类型检查。如果你想这样,你可以用ts笑话


这个问题的直截了当的答案是:巴贝尔,在编译之前去掉所有的打字标记。因此,您不会在cli中看到它出错。

所说的“builds successfully”是指JS仍在输出,还是在某一点上没有显示编译器错误消息?我是指JS仍在输出,我可以在开发模式下运行应用程序,甚至可以无任何问题地构建生产应用程序。我希望TypeScript在编译时能够阻止这种情况。当我运行
npx tsc
时,总是会显示编译器错误消息,但我希望每个TypeScript错误都显示一个红色屏幕,就像我对正常JS错误(如
const n=23)所做的那样;n、 反向()结果显示一个红色屏幕,显示消息“n.reverse不是函数。(在'n.reverse()'中,'n.reverse'未定义)”我也觉得这很奇怪。我也找不到适当的解决办法。