在TS中,可以指定数据类型。就是除了这个指定的数据类型,其他的数据类型都是不被允许的。
Boolean 布尔
let isDone: boolean = false;// 错误的let isDone: boolean = "string";
Number 数字
和JavaScript一样,TypeScript里的所有数字都是浮点数。 这些浮点数的类型是 number。 除了支持十进制和十六进制字面量,TypeScript还支持ECMAScript 2015中引入的二进制和八进制字面量。
let decLiteral: number = 6;let hexLiteral: number = 0xf00d;let binaryLiteral: number = 0b1010;let octalLiteral: number = 0o744;
String 字符串
let name: string = "bob";name = "smith";let helloName: string = `hello ${name}`;
Array 数组
let list: number[] = [1, 2, 3];
数组泛型
数组泛型可以规定数组内只允许有指定的数据类型的出现。
let list: Array<number> = [1, 2, 3];
Tuple 元组
可以定义一个知道元素数量和数据类型的数组,元素类型可以不一样, 但是位置必须一样。
let x: [string, number];x = ['hello', 10]; // OKx = [10, 'hello']; // Errorx = ['hello', 10, 11]; // Error
Enum 枚举
使用枚举类型可以为一组数值赋予友好的名字。
enum Color {Red, Green, Blue}let colorName: Color = Color.Green; // 1获取的是下标
枚举的下标是从0开始的,不过也是可以手动修改。
enum Color {Red = 1, Green, Blue}let colorRed: string = Color[1]; // Redlet colorGreen: string = Color[2]; // Greenlet colorBlue: string = Color[3]; // Blue// 全部手动赋值enum Color {Red = 1, Green = 2, Blue = 4};
Any 任意值
可以将它赋值给任何类型,它能让你避开类型检查。
let variable: any = 'a string';variable = 5;variable = false;variable.someRandomMethod(); /* 行吧,也许运行的时候 someRandomMethod 是存在的 */
Void 空值
表示没有任何类型。它通常用作没有返回值的函数的返回类型。
function warnUser(): void {console.log("This is my warning message");}
声明一个void类型的变量没有什么用,因为你只能为它赋予undefined和null
let unusable: void = undefined || null;
Null 和 Undefined
undefined 和 null 两者各自有自己的类型分别叫做 undefined 和 null。和 void 相似,它们的本身的类型用处不是很大,但是在联合类型中非常有用。
let u: undefined = undefined;let n: null = null;
Never
never 类型表示的是那些永不存在的值的类型。 例如,never 类型是那些总是会抛出异常、或者根本就不会有返回值的函数的返回值类型。
// 抛出异常function error(message: string): never {throw new Error(message);}// 永远不能返回function continuousProcess(): never {while (true) {// ...}}
Unknown
TypeScript 3.0 引入了 unknown (未知) 类型,它是与 any 类型对应的安全类型。任何东西都可以赋值给 unknown,但 unknown 不能赋值给除了它本身和 any 以外的任何东西。在没有先断言或指定到更具体类型的情况下,不允许对 unknown 进行任何操作。
type I1 = unknown & null; // nulltype I2 = unknown & string; // stringtype U1 = unknown | null; // unknowntype U2 = unknown | string; // unknown
Object
object表示非原始类型,也就是除number,string,boolean,symbol,null或undefined之外的类型。
declare function create(o: object | null): void;create({ prop: 0 }); // OKcreate(null); // OKcreate(42); // Errorcreate("string"); // Errorcreate(false); // Errorcreate(undefined); // Error
类型别名
类型别名可以为现有类型提供替代名称,以便某些地方使用。构造它的语法如下:
type Login = string;type int = number;
联合类型
让一个属性具有多种数据类型,名为 union (联合) 类型。
type Password = string | number;
交叉类型
交叉类型是将多种类型叠加到一起成为一种类型。
interface Person {name: string;age: number;}interface Worker {companyId: string;}type Employee = Person & Worker;
类型断言
允许以任何方式覆盖其推断的类型。当你比编译器本身能更好地理解变量类型时,可以使用它。
const friend = {};friend.name = 'John'; // Error! Property 'name' does not exist on type '{}'interface Person {name: string;age: number;}const person = {} as Person; // 或者 const person = <Person>{}; 因为在JSX中歧义,所以被as替代person.name = 'John'; // 正确
