当将一个类型的变量分配unknown给另一个变量时,我们应该对该变量进行类型检查unknown,但是 TypeScript 如何理解这个特定条件呢?看起来它正在返回 aboolean但我认为它更复杂:
let first: unknown = 5;
let second: number;
const result = typeof first === 'number';
if(result){
second = first; // error : Type 'unknown' is not assignable to type 'number'
}
if(typeof first === 'number'){
second = first; // no errors
}
Run Code Online (Sandbox Code Playgroud)
在 2021 年 6 月添加 PR #44730 后,TypeScript 在 TypeScript 4.4 中添加了对间接表达式类型缩小的支持。在介绍此功能的注释中,Anders Hejsberg 提到了此功能的局限性(强调并格式化了我的):
仅在以下情况下才会通过间接引用缩小范围:
- 条件表达式或判别式属性
const访问在没有类型注释的变量声明中声明,并且...- 缩小的参考范围是以下之一:
- 变量或
const- 财产或
readonly- 函数体中没有分配的参数。
在您的情况下,您的let first: unknown = 5;变量的分配不能与此功能一起使用,因为它是let局部变量而不是const局部变量。
因此,如果您将代码更改为 useconst first而不是let first,那么它就可以工作:
const first: unknown = 5;
let second: number;
const result = ( typeof first === 'number' );
if( result ) {
second = first; // OK!
}
if( typeof first === 'number' ) {
second = first; // OK!
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
107 次 |
| 最近记录: |