繁体   English   中英

Typescript 类型断言和非 null 检查

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM