当我们键入断言时,如果Typescript知道我们做错了,它将抱怨。例如
type Counter = (start: number) => number;
let counterProblemDetected = ((start: number) => "yo") as Counter;
但是启用非null检查后,它不会抱怨不会从函数返回,就像我们设置类型一样:
// 'strictNullChecks' is on
// Typescript does not complain
let counterProblemNotDetected = ((start: number) => {}) as Counter;
// Typescript complains about 'void' not being assignable to type number
let counterProblemDetected: Counter = ((start: number) => {})
我不明白这背后的逻辑。我可以理解,当我们使用类型断言时,Typescript不会进行任何检查,但是由于它会进行一些检查(在第一个示例中它抱怨返回字符串),为什么当返回undefined
时却不抱怨预期的数字,并且strictNullChecks
设置为true
吗?
答案 0 :(得分:2)
类型断言。鉴于打字稿系统的结构性质,函数类型(start: number) => number
是(start: number) => void
的子类型,因此这意味着您可以断言(start: number) => void
实际上是(start: number) => number
。
如注释中所述,最好避免类型断言,除非您有充分的理由使用类型断言(例如,编译器无法弄清您知道是正确的东西)。在示例中,您应该将类型注释放在变量上,这将使打字稿正确检查类型。