Skip to content

Latest commit

 

History

History
136 lines (101 loc) · 3.44 KB

值的类型化.md

File metadata and controls

136 lines (101 loc) · 3.44 KB

什么是值

简单点说,凡是可以被变量存储的单元都是值。它可以是简单的字符串、数字,也可以是复杂的由多条语句组成的代码单元,如类、函数、对象等:

// 字符串作为值
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编译器判定值的类型时,主要是通过以上三种方式。