[英]Typescript type assertions and non null checks
当我们进行类型断言时,如果 Typescript 知道我们不可能正确,它会抱怨。 例如
type Counter = (start: number) => number;
let counterProblemDetected = ((start: number) => "yo") as Counter;
但是当启用非 null 检查时,它不会抱怨没有从 function 返回,就像我们设置了类型一样:
// '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 系统的结构性质,function 类型(start: number) => number
是(start: number) => void
的子类型,因此这意味着您可以断言(start: number) => void
实际上是(start: number) => number
。
正如评论中提到的,最好避免使用类型断言,除非您有充分的理由使用类型断言(例如,编译器无法找出您知道是真的东西)。 在您的示例中,您应该只将类型注释放在变量上,这将使 typescript 正确检查类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.