登录/注册
小开开
2649
占位
2
占位
0
浏览量
占位
粉丝
占位
关注
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 & ...

类型推导

日常开发中,类型注解是可选的,在绝大多数未显式注解类型的情况下,编译器能自动推导出值的类型

小技巧:如果你在编码时用肉眼能看出一个未注解值的类型,那么编译器也能推导出来

// 变量被自动推导为字符串类型 string
let variable = 'hello world';
// 等价于
let variable: string = 'hello world';
// 返回值被自动推导为数字类型 number
function show(param: number) {
return param;
}
// 等价于
function show(param: number): number {
return param;
}

类型查询

类型查询是一条语句,相当于一个独立类型。代码中任何需要显式注解类型的地方,都可以使用类型查询代替:

: typeof 值

在JavaScript中,typeof 是一个用来判断值类型的关键字,在类型查询语法中有类似的作用。

// 声明a为number
let a: number;
// 通过类型查询声明b的类型
let b: typeof a;
// 等价于
let b: number;
// 函数fn为函数
function fn(){}
// 通过类型查询声明d的类型为fn的类型
let d: typeof fn;
// 等价于
let d: () => void;

总结

类型注解类型推导类型查询构成了TypeScript的类型判定系统,TypeScript编译器判定值的类型时,主要是通过以上三种方式。

暂无评论