TypeScript 提供了多种方式来声明和使用类型,以支持强类型的特性和静态类型检查。以下是一些常见的类型声明方式:
基本类型声明
- 字符串:
let name: string; - 数字:
let age: number; - 布尔值:
let isValid: boolean; - 数组:
let list: number[];或使用泛型Array<number>; - 元组:
let role: [number, string];// 元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同。 - 枚举:
enum Color {Red, Green, Blue}// 枚举类型用于定义一组命名的常数。 - Any:
let notSure: any;// Any类型允许赋值为任意类型。 - Void:
function warnUser(): void { }// 通常用于没有返回值的函数。 - Null 和 Undefined:
let u: undefined; let n: null;// TypeScript 里,undefined和null有各自的类型分别名为undefined和null。 - Never:
function 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 中常见的类型声明方式,它们提供了强大的工具来帮助开发者编写更安全、更易于维护的代码。