首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这是“TypeScript类型的系统故障”的行为吗?

这是“TypeScript类型的系统故障”的行为吗?
EN

Stack Overflow用户
提问于 2019-12-12 23:03:16
回答 1查看 385关注 0票数 1

考虑到以下代码,我希望TypeScript编译器会失败:

代码语言:javascript
复制
function test(f: string) {
    console.log(typeof f);
}

const foo: any = ["Test"];
test(foo);

const boo = "test";
test(boo);

产出如下:

代码语言:javascript
复制
object
string

我不太愿意在GitHub上写一个bug,因为我不是TypeScript专家。大家怎么看?

操场连接

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-13 01:39:14

类型的目的是选择不对代码的某些部分进行类型检查。它故意不健全;所有类型都可以分配给any,而any可以分配给所有类型(never除外)。这既有用又危险。很有用,因为在某些时候,正确地键入一段有效的真实世界代码是乏味的、困难的或不可能的,而any则是一个转义舱口。因为编译器无法区分使用any键入的有效代码和用any键入的无效代码之间的区别,所以很危险。因此,对any的建议通常是“谨慎使用它”。

如果您发现这样的建议不够,因为您不信任他人或您自己不编写类似于上面的test(foo)这样的代码,那么在完全放弃TypeScript之前,您至少可以探索一个选项:去皮

TSLintTypeScript ESLint都可以配置为不允许将值注释为any类型。TSLint的规则称为no-any,TypeScript的规则称为no-explicit-any。这将导致您得到一个错误,如下所示:

代码语言:javascript
复制
// TSLint
const foo: any = ["Test"];
// -----> ~~~~
// ERROR: no-any  Type declaration of 'any' loses type-safety. 
// Consider replacing it with a more precise type.

或者有可能

代码语言:javascript
复制
// TypeScript ESLint
const foo: any = ["Test"];
// -----> ~~~~
// warning  Unexpected any. Specify a different type
// @typescript-eslint/no-explicit-any

好吧,希望这能帮上忙,祝你好运!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59313928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档