为什么以下代码段未引发任何错误或警告?
{
let x: number;
let y: any;
y = "hello";
x = y;
}
我的期望是:应该将y
的任何内容都明确地键入为any
,但是应该将数字分配给x
,因为它的明确类型是{{1 }},如果需要将number
分配给any
,则应将其显式转换为x
:
number
当前的行为如何被认为是可以接受的,或者是一个好主意,而不是最初的错误?此外,是否有一种方法可以迫使编译器对此提出问题,并且仅接受显式强制转换?
其他信息:
x = y as number;
版本:tsc
- 编译器选项:
{ "target": "ES5", "noImplicitAny": true, "strictNullChecks": true, "downlevelIteration": true, "experimentalDecorators": true, "strictBindCallApply": true, "strictFunctionTypes": true, "strictPropertyInitialization": true }
答案 0 :(得分:2)
这是any
的已定义行为。此类型是同一类型:
any
有多种用途。几个例子:
any
的过程中,使您仍可以在转换时成功地编译代码非常有用。any
,然后就可以像在JS中那样使用它了)。虽然从长远来看,最好编写定义。 所有这些,我今天将不惜一切代价避免any
在Typescript中使用。打字稿3.0
引入了unknown
类型,其行为类似于您期望any
的行为(即,您可以为其分配任何内容,但不能分配给任何其他类型)。进一步了解unknown
here
摆脱any
的一些选择:
noImplictAny
编译器设置可防止编译器在未指定类型的情况下推断any
(相反,它将发出错误)no-unsafe-any
tslint规则,以动态方式禁止使用any
,即,只有在no-any
适用的情况下才允许使用|空|未定义any
tslint规则,禁止{{1}}