在不添加linter的情况下,我想禁止在没有任何类型注解或初始化器的情况下使用let x;
。如果它有一个初始化器,那很好,TypeScript将从初始化器推断类型。但是没有一个,x
具有类型any
-即使设置了noImplicitAny
,这让我感到惊讶。
所以:
// This is fine, type is inferred from initializer:
let a = 42;
// Also fine, type is provided explicitly:
let b: string;
// Should be an error:
let x;
// ^? let x: any
这里有一个playground链接,上面的代码启用了noImplicitAny
(和strict
,虽然我不认为这有关系),显示它不做这个检查。在x
上没有错误。我可以给它分配任何我想要的值,它的类型是any
。
是否有一个TypeScript配置选项或选项组合我错过了?
注意:我意识到在没有赋值给x
之前,任何东西 * 使用 * x
都是错误的。问题是x
的类型是any
,让它开放以赋值给它任何东西。
2条答案
按热度按时间soat7uwm1#
你漏掉了一件重要的事
未定义变量显然是
any
,但在开始使用它时,它获得了一个类型如果它 * 实际上 * 被用作“implicit any”,则 * 会出现 * 错误-您只是没有为此编写适当的测试
34gzjxbg2#
很难证明否定,但就我所知,通过TypeScript选项,没有办法让TypeScript(与linter相反)在
let
声明中强制初始化器或类型。