联合类型和类型保护

Posted studyweb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了联合类型和类型保护相关的知识,希望对你有一定的参考价值。

 1 interface Bird{
 2     fly:boolean;
 3     sing:()=>{}
 4 }
 5 interface Dog{
 6     fly:boolean;
 7     bark:()=>{}
 8 }
 9 //不会提示sing和bark方法需要判断,直接使用会报错
10 //两种常用方法:一种用 as 一种用 in
11 function trainAnial(animal:Bird|Dog){
12     if(animal.fly){
13         (animal as Bird).sing()
14     }else{
15         (animal as Dog).bark()
16     }
17 }
18 function fn1(animal:Bird|Dog){
19     if(sing in animal){
20         animal.sing()
21     }else{
22         animal.bark()
23     }
24 }
25 //一个为字符串就会报错
26 function add (first:number|string,secound:number|number){
27     if(typeof first==string||typeof secound==string){
28         return 0
29     }
30     return first+secound
31 }
32 //必须为类
33 class NumberObj{
34     count:number
35 }
36 function addA(first:object|NumberObj,secound:object|NumberObj){
37     if(first instanceof NumberObj&&secound instanceof NumberObj){
38     return first.count+secound.count
39 
40     }
41     return 0
42 }

 

以上是关于联合类型和类型保护的主要内容,如果未能解决你的问题,请参考以下文章

LayaBox---TypeScript---高级类型

TypeScript 学习笔记 — 类型推断和类型保护

聊聊 TypeScript 中的类型保护

聊聊 TypeScript 中的类型保护

为啥在一个函数中声明的联合类型在另一个函数中使用无效?

如何区分 React 上下文的联合