TypeScript的类型申明

58 阅读2分钟

TypeScript 提供了多种方式来声明和使用类型,以支持强类型的特性和静态类型检查。以下是一些常见的类型声明方式:

基本类型声明

  • 字符串let name: string;
  • 数字let age: number;
  • 布尔值let isValid: boolean;
  • 数组let list: number[]; 或使用泛型 Array<number>;
  • 元组let role: [number, string]; // 元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同。
  • 枚举enum Color {Red, Green, Blue} // 枚举类型用于定义一组命名的常数。
  • Anylet notSure: any; // Any类型允许赋值为任意类型。
  • Voidfunction warnUser(): void { } // 通常用于没有返回值的函数。
  • Null 和 Undefinedlet u: undefined; let n: null; // TypeScript 里,undefined 和 null 有各自的类型分别名为 undefined 和 null
  • Neverfunction error(message: string): never { throw new Error(message); } // 表示的是那些永不存在的值的类型。

高级类型

  • 联合类型:允许一个值是几种类型之一,例如 let id: number | string;
  • 交叉类型:将多个类型合并为一个类型,例如 type Combined = A & B;
  • 类型别名:给一个类型起个新名字。type StringOrNumber = string | number;
  • 接口:定义对象的结构。interface LabelledValue { label: string; }
  • :定义类及其成员。class Greeter { }
  • 泛型:允许在定义函数、接口或类的时候不预先指定具体的类型,而在使用的时候再指定类型的一种特性。function identity<T>(arg: T): T { }

类型断言

类型断言是一种特殊的语法,用于告诉编译器,开发者已经知道了关于变量的类型信息。类型断言有两种形式:

  • let someValue: any = "this is a string";
  • let strLength: number = (<string>someValue).length;
  • 或使用 as 语法:let strLength: number = (someValue as string).length;

字面量类型

字面量类型允许你指定一个变量或参数必须具有的确切值。

  • 字符串字面量类型:let hello: "hello";
  • 数字字面量类型:let one: 1;
  • 布尔字面量类型:let trueType: true;

映射类型

通过现有的类型创建新类型的方式,它可以遍历现有类型的属性。

  • type Readonly<T> = { readonly [P in keyof T]: T[P]; }

条件类型

根据条件选择类型。

  • type NonNullable<T> = T extends null | undefined ? never : T;

这些是 TypeScript 中常见的类型声明方式,它们提供了强大的工具来帮助开发者编写更安全、更易于维护的代码。