【发布时间】:2019-09-19 09:48:06
【问题描述】:
当我们进行类型断言时,如果 Typescript 知道我们不可能正确,它就会抱怨。比如
type Counter = (start: number) => number;
let counterProblemDetected = ((start: number) => "yo") as Counter;
但是当启用非空检查时,它不会抱怨没有从函数返回,就像我们设置了类型一样:
// '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?
【问题讨论】:
-
"如果 Typescript 知道我们不可能是对的" --- 使用
as的情况确实很少。另一方面,在使用 TS 开发几年后,我什至记不起一个需要它的案例。像您的问题一样简单的东西当然不需要它。 -
@zerkms 我是 TypeScript 的新手,这个问题的灵感来自文档 (typescriptlang.org/docs/handbook/interfaces.html#hybrid-types) 中看到的示例,他们使用类型断言来定义函数(混合类型)的属性。
-
对。我建议你不要太关注它,我个人认为
as很危险:如果你是初学者,你比编译器更了解的机会几乎为零;如果您非常先进,以至于您比编译器真正了解 - 你不需要任何人的帮助:-)
标签: typescript