End

TypeScript 基础类型

本文地址

TypeScript 基础类型

数据类型

使用 unknown 类型处理不确定的数据,比使用 any 类型更加安全

类型 描述 示例
string 字符串,支持模板字符串 let name: string = "Alice";
number 数字,包括整数和浮点数 let age: number = 30;
boolean 布尔值 truefalse let isDone: boolean = true;
array 数组,xx[]Array<xx> let list: number[] = [1, 2, 3];
tuple 元组,已知类型和长度的数组 let person: [string, number] = ["qt", 30]
enum 枚举,定义一组命名常量 enum Color { Red, Green, Blue };
any 任意类型,会绕过编译时的类型检查 let value: any = 42;
void 无返回值(常用于函数) function log(): void {}
null 空值 let empty: null = null;
undefined 未定义 let undef: undefined = undefined;
never 没有返回值,表示函数不会正常结束 function e(): never {throw new Error('e')}
object 非原始类型 let obj: object = { name: "Alice" };
union 联合类型,表示可以是多种类型之一
unknown 不确定类型,需类型检查后再使用 let value: unknown = "Hello";

null 和 undefined

null 和 undefined 是其他任何类型(包括 void,但不包括 never)的子类型,可以赋值给其它类型。

在 TypeScript 中启用严格的空校验 --strictNullChecks 后,就可以使得 null 和 undefined 只能被赋值给 void 或本身对应的类型

// 启用 --strictNullChecks
let x: number;
x = 1;         // 编译正确
x = undefined; // 编译错误
x = null;      // 编译错误

// 如果一个类型可能出现 null 或 undefined, 可以用 | 来支持多种类型
let y: number | null | undefined;
y = 1;         // 编译正确
y = undefined; // 编译正确
y = null;      // 编译正确

never

never 是其它类型(包括 null 和 undefined)的子类型,代表从不会出现的值。

never 类型表示不会有返回值,通常用于抛出错误或进入无限循环的函数,表示该函数永远不会正常结束。

let x: never;
let y: number;

x = 123;// 编译错误,数字类型不能转为 never 类型


x = (() => { throw new Error('exception') })(); // 运行正确
y = (() => { throw new Error('exception') })(); // 运行正确

// 返回值为 never 的函数,可以是抛出异常的情况
function error(message: string): never {
    throw new Error(message);
}

// 返回值为 never 的函数,可以是无法被执行到的终止点的情况
function loop(): never {
    while (true) { }
}

基本类型自动装箱

在 JavaScript 中,值类型(基本类型)本身不是对象,因此它们不直接拥有属性和方法。基本类型包括 number、string、boolean、null、undefined 和 symbol, 这些类型的值都是简单的数据,而不是复杂的数据结构。

然而,JavaScript 为每种基本类型都提供了一个对应的包装对象。当你尝试访问一个基本类型的属性或方法时,JavaScript 会临时地将这个基本类型的值转换为对应的包装对象,以便可以调用该对象上的属性和方法。这种转换是自动进行的,通常被称为“装箱”。一旦属性和方法的使用完毕,这个临时对象就会被销毁,值又恢复为其原始的基本类型。

var x = "John";
var y = new String("John");

console.log(typeof x) // 返回 string
console.log(typeof y) // 返回 object
console.log(x === y)  // 结果为 false,因为 x 是字符串,y 是对象

2016-12-13

posted @ 2016-09-20 17:36  白乾涛  阅读(912)  评论(0)    收藏  举报