返回

TS类型系统全解析:探索类型检查和类型推断的精妙世界

前端

TypeScript以其严格的类型检查系统而闻名,但你知道吗?TypeScript还提供了一系列实用程序类型来促进常见的类型转换。这些类型在全局范围内可用,可以帮助您轻松处理不同类型之间的转换和操作。

内置类型

TypeScript内置了以下几种实用程序类型:

  • Partial<T>:创建一个新类型,该类型与类型T具有相同的属性,但所有属性都是可选的。例如,Partial<{ name: string; age: number; }>创建一个新类型,其中nameage属性都是可选的。
  • Required<T>:创建一个新类型,该类型与类型T具有相同的属性,但所有属性都是必需的。例如,Required<{ name?: string; age?: number; }>创建一个新类型,其中nameage属性都是必需的。
  • Readonly<T>:创建一个新类型,该类型与类型T具有相同的属性,但所有属性都是只读的。例如,Readonly<{ name: string; age: number; }>创建一个新类型,其中nameage属性都是只读的。
  • Record<K, V>:创建一个新的对象类型,该类型具有指定类型的键和值的键值对。例如,Record<string, number>创建一个新的对象类型,该类型具有字符串键和数字值的键值对。
  • Pick<T, K>:创建一个新的类型,该类型具有类型T的指定属性。例如,Pick<{ name: string; age: number; }, 'name'>创建一个新的类型,该类型仅具有name属性。
  • Omit<T, K>:创建一个新的类型,该类型具有类型T,除了指定属性之外的其他属性。例如,Omit<{ name: string; age: number; }, 'age'>创建一个新的类型,该类型仅具有name属性。

类型扩展

类型扩展是一种将新属性或方法添加到现有类型的方式。例如,我们可以使用类型扩展来为Array类型添加一个last()方法,该方法返回数组的最后一个元素。

declare global {
  interface Array<T> {
    last(): T | undefined;
  }
}

const numbers = [1, 2, 3, 4, 5];
console.log(numbers.last()); // 5

类型断言

类型断言是一种显式告诉TypeScript编译器将变量或表达式的类型视为特定类型的方式。例如,我们可以使用类型断言来将一个any类型的值转换为一个更具体的类型。

const value = JSON.parse('{"name": "John Doe"}');

const person = value as { name: string };

console.log(person.name); // John Doe

总结

TypeScript的内置类型和自定义类型提供了丰富的类型操作方式,帮助您轻松处理不同类型之间的转换和操作,从而编写出高质量的代码。