TypeScript 类型断言之 is 关键字

111次阅读
没有评论

如题,is 关键字是 TS 类型断言的一种方式。

我们常用的是另一种,as。as 能满足我们基本的类型断言的需要,如我们单纯的想打印一个变量的某个属性,或者调用它的函数,我们只想执行一次这样的操作,那么 as 就能很好的工作了。

但是有时我们需要对这个变量做一系列的操作,如果每次都需要 as 断言一下,那么就会显得很麻烦,有没有什么办法能实现一次断言,多次操作呢?is 关键字就是来做这个的。

is 关键字用来让用户实现“类型守卫”,实际上就是一个函数,用来判断类型,类型守卫经常和条件判断一块使用,在判断成功后的代码块中均可认为变量是断言的那个类型,无需每次都 as。

// 自定义类型守卫函数
function isEvenNumber(num: any): num is number {return typeof num === "number" && num % 2 === 0;}

// 使用 is 进行类型断言
function doubleIfEven(num: any): any {if (isEvenNumber(num)) {
// 无论执行多少次操作,都认为 num 是偶数类型
return num * 2;
} else {return "Not an even number";}
}

console.log(doubleIfEven(2)); // 输出:4
console.log(doubleIfEven("2")); // 输出:"Not an even number"

类型守卫的参数可以是任意类型,只要能帮你做判断即可:

interface Circle {
kind: 'circle';
radius: number;
}

interface Square {
kind: 'square';
sideLength: number;
}

// 联合类型
type Shape = Circle | Square;

function isCircle(shape: Shape): shape is Circle {return shape.kind === 'circle';}

function calculateArea(shape: Shape) {if (isCircle(shape)) {
// 在这里,shape 被类型细化为 Circle 类型
return Math.PI * shape.radius * shape.radius;
} else {
// 在这里,shape 被类型细化为 Square 类型
return shape.sideLength * shape.sideLength;
}
}
正文完
 0
狐耳阿霖
版权声明:本站原创文章,由 狐耳阿霖 于2023-12-05发表,共计1003字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)