登录/注册
开开
4324
8
11
浏览量
粉丝
关注
TypeScript-简单类型
开开
2020-12-10 17:16:03
96
0

数字类型

数字类型关键字为 number ,所有数字都是浮点数

let intLiteral: number = 6;
let floatLiteral: number = 3.1415;

布尔类型

布尔类型关键字为 boolean,仅有两个值 truefalse

let isDone: boolean = false;
isDone = true;

字符串类型

字符串类型关键字为 string

let name: string = "bob";

符号类型

符号类型关键字为 symbol

let sym: symbol = Symbol();  
let sym1: symbol = Symbol('test');

Void类型

Void类型关键字为 void , Void类型 表示没有类型或空类型。

当一个函数没有返回值时,你可以显式指定返回值为 void;如果不显式指定,会被自动推导为 Void类型

// 显式指定返回类型为 void
function hi(): void { /**函数体为空**/ }
// 和上面等价,返回值会被自动推导为 void
function hi() { /**函数体为空**/ }

显式声明一个值为 Void类型 是合法的,但没什么意义,因为你只能为它赋值undefinednull

let x: void = undefined;

// 仅在 strictNullChecks 编译选项关闭时合法
let y: void = null; 

当把 null 赋值给 Void类型 的时候,仅在 strictNullChecks 编译选项关闭时才合法

Null类型 和 Undefined类型

  • Null类型关键字为 null
  • Undefined类型关键字为 undefined

nullundefined 既可以是类型关键字,也可以是值,参靠下面示例代码

Null类型和Undefined类型的类型表现和编译选项 strictNullChecks 有关,上面已经提到这个选项。编译相关的教程后面会有专门的介绍,此处不做讲解。

strictNullChecks 选项打开

  • null 只能赋值给 Null类型
  • undefined 只能赋值给 Undefined类型 和 Void类型
// 合法
let n: null = null;
let u: undefined = undefined;
let v: void = undefined;

// 不合法
let v: void = null;

strictNullChecks 选项关闭

  • nullundefined 可以赋值给任意类型
// 合法
let v1: undefined = null;
let v2: void = undefined;
let v3: null = undefined;
let x: number = null;
let y: string = undefined;

Never类型

Never类型关键字为 never。Never类型代表不可能存在的类型,Never类型常常伴随着错误和异常出现(因为错误和异常可以提前终止,让值无法到达):

// 抛出异常,永远无法返回
function error(message: string): never {
    throw new Error(message);
}

// 死循环,永远无法返回
function infiniteLoop(): never {
    while (true) {
    }
}

// 声明交叉类型变量:既是布尔类型也是数字类型
let n: boolean & number;
// 以下赋值皆错误,不可能存在一个值既是布尔类型也是数字类型
n = 1; // error TS2322: Type '1' is not assignable to type 'never'
n = null; //  error TS2322: Type 'null' is not assignable to type 'never'
n = false; // error TS2322: Type 'false' is not assignable to type 'never'

上面示例中的交叉类型变量赋值,根据错误提示可知,会被编译器推导为 never 类型:

// 声明不可能存在的交叉类型
let n: boolean & number;
// 等价于
let n: never;

任意值类型

任意值的类型关键字为 any,任意值就是可以被当做任意类型使用的值。任意值具有动态类型特性:

// 声明为任意类型
let notSure: any = 4;

// 赋值为字符串类型
notSure = "hello world";

// 赋值为布尔类型
notSure = false;

一个值,如果满足以下任何一个条件,会被判定为任意类型:

1、显式指定类型 any

// 显式指定变量类型,x为any
let x: any;

// 显式指定变量类型,y为any
let y: any = 10;

2、未显式指定类型,且没有初始化或默认值

// 未指定类型,且未初始化。x为any
let x;

// 未指定类型,但初始化了。y被自动推导为number
let y = 10;

// 未指定类型,且没有默认值。参数x为any
function f(x) {
  console.log(x);
}

尽量不要使用any类型,any类型表现上跟JavaScript的类型一样弱。TypeScript最大的优势在于类型化带来的强约束作用,他可以让你更早的发现错误,并带来更高的可维护性

暂无评论