TS系列之typeof
这里写目录标题
- 前言
- 回顾:Js中typeof的用法
- 1、typeof的返回类型有哪些
- Ts 中的 typeof 运算符作为类型判断的工具
- 什么是 typeof?
- 类型保护与条件类型
- 复杂类型
- 总结
前言
今天总结一下typeof相关的知识。
typeof在Js中也是常用来判断变量类型的关键字,那么在Ts中的作用又是什么,下面一起来看看。
回顾:Js中typeof的用法
1、typeof的返回类型有哪些
- “undefined”
typeof undefined
- “object”
typeof null或者其他任意对象
至于null为什么返回的类型是object可以参考这篇文章:typeof null is ‘object’
- “boolean”
typeof true
- “number”
typeof 1
- “bigint”
typeof BigInt(1)
- “string”
typeof ""
- “symbol”
typeof Symbol(1)
- “function”
typeof function a () {}
Ts 中的 typeof 运算符作为类型判断的工具
什么是 typeof?
typeof
是 TypeScript 中的运算符,用于获取给定表达式的类型。返回一个表达式类型的字符串。
一个简单的例子:
const num = 1;
const str = "Hello";
console.log(typeof num); // 输出 "number"
console.log(typeof str); // 输出 "string"
在这个例子中,typeof num
返回 “number”,而 typeof str
返回 “string”,很明显这和js中没有什么区别。
类型保护与条件类型
typeof
运算符的真正强大之处在于它与条件类型的结合使用。通过将 typeof
与条件类型结合,我们可以在运行时对不同类型的代码进行条件分支。
举个例子:
比如我们想要实现一个函数,将传入的数字或者字符串类型的数据自增1并返回
function test (num: number | string): number | string {return num++
}
//这时候ts报错,提示:An arithmetic operand must be of type 'any', 'number', 'bigint' or an enum type.
//意思是:算术操作数的类型必须是“any”、“number”、“bigint”或枚举类型
这个时候typeof就可以派上用场,改造如下:
function test (num: number | string): number | string {if (typeof num === 'number') {return ++num;} else {return +num + 1;}
}
复杂类型
typeof
判断复杂类型时和js中的用法一样"object"、“function”、“symbol” 等等。
接下来我们看一下实际在开发中用的场景:
1、例如我们有个对象,如果对象嵌套深或者对象属性较多时,那么你就可以直接用tyoeof来获取这个对象的属性中的所有类型。
const appconfig = {id: '1',text: 'app',appName: 'app',appImg: 'https://app',appType: 'app',positionNum: 1,url: 'https://app'
}type appType = typeof appconfig
type appType = {id: string;text: string;appName: string;appImg: string;appType: string;positionNum: number;url: string;
}
const appconfigtest: appType = {}
//所以你就可以直接用appType来约束新定义对象appconfigtest
2、也可以获取对象中单个属性的类型
type appType = typeof appconfig.appImg
//type appType = string
3、当我想要通过函数创建并获取类的实例,那么就可以通过typeof获取到class构造函数的类型
class APP {name: string;img: string;constructor (name: string, img: string) {this.name = name;this.img = img;}
}
//(parameter) CP: new (name: string, img: string) => APP
function createApp(CP: typeof APP, name: string, img: string) {return new CP(name, img);
}
总结
到这里我们就基本了解了typeof在ts中常见的一些用法, 其它用法还需继续探索,分享学习。