typescript - “”的这种行为是 TypeScript 类型系统错误吗?
问题描述
鉴于此代码,我希望 TypeScript 编译器会失败:
function test(f: string) {
console.log(typeof f);
}
const foo: any = ["Test"];
test(foo);
const boo = "test";
test(boo);
输出是:
object
string
因为我不是 TypeScript 专家,所以我犹豫要不要在 GitHub 上写一个错误。人们怎么看?
解决方案
类型的重点是any
选择退出对代码的某些部分进行类型检查。它是故意不健全的;所有类型都any
可以any
分配给所有类型(除了never
)。这既有用又危险。很有用,因为有时候正确输入一段有效的真实世界代码是乏味、困难或不可能的,并且any
是一个逃生舱。很危险,因为编译器无法区分使用键入的有效代码和使用 键入any
的无效代码any
。所以总的来说,建议any
是“谨慎使用”。
如果您认为这样的建议还不够,因为您不相信他人或您自己不会编写test(foo)
上述代码,那么在完全抛弃 TypeScript 之前,您至少可以探索一个选项:linting。
TSLint和TypeScript ESLint都可以配置为禁止将值注释为 type 。调用 TSLint 的规则,调用TypeScript ESLint 的规则。这将导致您收到如下错误:any
no-any
no-explicit-any
// TSLint
const foo: any = ["Test"];
// -----> ~~~~
// ERROR: no-any Type declaration of 'any' loses type-safety.
// Consider replacing it with a more precise type.
或者可能
// TypeScript ESLint
const foo: any = ["Test"];
// -----> ~~~~
// warning Unexpected any. Specify a different type
// @typescript-eslint/no-explicit-any
好的,希望有帮助;祝你好运!
推荐阅读
- python - 无法在 django admin 中保存嵌入式字段数据
- flutter - Flutter web 中似乎不支持字体粗细
- python - Pycharm 构建轮:“错误:命令错误,退出状态为 1”
- java - 为什么这个 While 循环不能正确执行
- git - 从合并的分支编辑提交消息
- php - 使用 PHP 使用 SQLite 的 Nginx 抛出错误
- java -
UnsupportedEncodingException 当我在带空格的变量后面写“”时发送电子邮件? - google-sheets - 在嵌入的 Google 工作表上悬停时显示注释
- postman - 如何将 newman 报告的结果发送给 Datadog?
- vim - Vim 弹出对话框无法调整大小