TypeScript-值的类型化
小开开 2020-12-04 17:15:56 2020-12-04 79 0
什么是值
简单点说,凡是可以被变量存储的单元都是值。它可以是简单的字符串、数字,也可以是复杂的由多条语句组成的代码单元,如类、函数、对象等:
// 字符串作为值let stringValue = 'hello world';// 对象字面量作为值let objectLiteralValue = { attribute: 'hello world'};// 函数作为值let funcValue = function(){};// 函数返回作为值function fn(){ return 'hello world';}let returnValue = fn();// 类作为值let classValue = class {}
在TypeScript中,所有的值都具有强制类型,值的类型化是TypeScript区别于JavaScript最显著的特征。
实际上,JavaScript也是有类型的,只不过JavaScript的类型信息是在编译阶段由编译器判定,对程序员来说,值可以任意赋予,编写代码时就好像类型弱的不存在一样
类型注解
类型注解是指在源代码中显式指定值的类型,它的语法格式如下:
: 类型
冒号加类型构成了类型注解,冒号前后可以包含任意空格,以下都是合法的类型注解语法:
// 声明字符串类型变量let str: string;// 声明字符串类型变量并初始化let strValue: string = 'hello world';// 指定类的属性类型class Hello { show: boolean = true;}// 指定函数参数和返回值类型function sum(a: number, b: number): number { return a + b;}
下表列举了TypeScript支持的所有类型,作为一个学习前的概览,在后续章节将会详细介绍:
类型 | 语法形式 |
---|---|
数字类型 | number |
布尔类型 | boolean |
字符串类型 | string |
符号类型 | symbol |
Void类型 | void |
Null类型 | null |
Undefined类型 | undefined |
Never类型 | never |
任意类型 | any |
数组类型 | T[] |
元组类型 | [T0, T1, ...] |
枚举类型 | enum T { ... } |
函数类型 | (p1: T1, p2: T2, ...) => T |
类类型 | T |
构造器类型 | new (p1: T1, p2: T2, ...) => R |
对象类型 | { ... } 或 interface T { ... } |
联合类型 | `T1 |
交叉类型 | T1 & T2 & ... |
类型推导
日常开发中,类型注解是可选的,在绝大多数未显式注解类型的情况下,编译器能自动推导出值的类型
小技巧:如果你在编码时用肉眼能看出一个未注解值的类型,那么编译器也能推导出来
// 变量被自动推导为字符串类型 stringlet variable = 'hello world';// 等价于let variable: string = 'hello world';// 返回值被自动推导为数字类型 numberfunction show(param: number) { return param;}// 等价于function show(param: number): number { return param;}
类型查询
类型查询是一条语句,相当于一个独立类型。代码中任何需要显式注解类型的地方,都可以使用类型查询代替:
: typeof 值
在JavaScript中,typeof
是一个用来判断值类型的关键字,在类型查询语法中有类似的作用。
// 声明a为numberlet a: number;// 通过类型查询声明b的类型let b: typeof a;// 等价于let b: number;// 函数fn为函数function fn(){}// 通过类型查询声明d的类型为fn的类型let d: typeof fn;// 等价于let d: () => void;
总结
类型注解、类型推导和类型查询构成了TypeScript的类型判定系统,TypeScript编译器判定值的类型时,主要是通过以上三种方式。
- 作者:joye
- 出处:https://github.com/joye61