TypeScript 类型

一、类型

  1. 基本类型:

    • number:表示数字类型,包括整数和浮点数。
    • string:表示字符串类型。
    • boolean:表示布尔类型,只有两个可能的值:truefalse
    • nullundefined:分别表示 null 值和 undefined 值。
    • symbol:表示唯一的、不可变的值,用作对象的属性。
    • bigint:表示任意精度的整数。
    • 字面量:字面量类型是通过直接指定具体的字面量值来表示的类型。
  2. 复合类型:

    • array:表示数组类型,可以包含多个元素,每个元素可以具有相同或不同的类型。
    • object:表示对象类型,可以包含多个属性和对应的值。
    • tuple:表示元组类型,是固定长度和固定类型的数组。
    • enum:表示枚举类型,定义一组命名常量。
    • any:表示任意类型,取消了类型检查。
    • unknown:表示未知类型,类似于 any,但更加类型安全。
    • void:表示没有返回值的函数的返回类型。
    • never:表示永远不存在的值的类型,通常用于表示抛出异常或无法执行到的代码路径。
  3. 其他类型:

    • union:表示联合类型,一个值可以是多个类型之一。
    • intersection:表示交叉类型,一个值同时具有多个类型的属性。
    • function:表示函数类型,包括参数类型和返回值类型。
    • class:表示类类型,用于创建对象的蓝图。
    • interface:表示接口类型,用于描述对象的结构和属性。
    • type:表示自定义类型别名。
    • readonly:表示只读属性修饰符。
    • Partial<T>:表示将类型 T 的所有属性设置为可选。
    • Pick<T, K>:表示从类型 T 中选择指定属性 K 形成新的类型。
    • Record<K, T>:表示将类型 T 的值与类型 K 的键关联形成新的类型。

此外,还有许多高级类型和类型操作符,如映射类型、条件类型、infer 关键字等,用于更复杂的类型操作和推导。

二、例子

  1. 基本类型:
let num: number = 10;
let str: string = "Hello";
let bool: boolean = true;
let n: null = null;
let u: undefined = undefined;
let sym: symbol = Symbol("key");
let big: bigint = BigInt(10);
let stringLiteral: "hello" = "hello";
  1. 复合类型:
let arr: number[] = [1, 2, 3];
let obj: object = {
    
     key: "value" };
let tuple: [number, string] = [1, "one"];
enum Color {
    
     Red, Green, Blue }
let c: Color = Color.Green;
let anyValue: any = 5;
let unknownValue: unknown = "unknown";
let voidFunc: () => void = () => {
    
     console.log("Void function"); };
let neverValue: never = (() => {
    
     throw new Error("Error"); })();
  1. 联合类型和交叉类型:
let union: string | number = "hello";
union = 10;

interface A {
    
     a: number }
interface B {
    
     b: string }
type Intersection = A & B;

let obj: Intersection = {
    
     a: 1, b: "two" };
  1. 函数类型:
function add(x: number, y: number): number {
    
    
  return x + y;
}

let multiply: (x: number, y: number) => number;
multiply = (x, y) => x * y;
  1. 类类型:
class Person {
    
    
  name: string;
  constructor(name: string) {
    
    
    this.name = name;
  }
}

let person: Person = new Person("Alice");
  1. 接口类型:
interface Point {
    
    
  x: number;
  y: number;
}

let point: Point = {
    
     x: 1, y: 2 };
  1. 高级类型和类型操作符:
type PartialPoint = Partial<Point>;
let partialPoint: PartialPoint = {
    
     x: 1 };

type PickedPoint = Pick<Point, "x">;
let pickedPoint: PickedPoint = {
    
     x: 1 };

type RecordPoint = Record<string, number>;
let recordPoint: RecordPoint = {
    
     x: 1, y: 2 };

type MappedNumbers = {
    
     [K in "one" | "two"]: number };
let mappedNumbers: MappedNumbers = {
    
     one: 1, two: 2 };

type ReturnTypeFunc = () => string;
let returnTypeFunc: ReturnTypeFunc = () => "Hello";

三、特性

  1. 类型安全性(Type Safety):TypeScript 强调类型安全性,通过类型检查在编译时捕获潜在的类型错误,避免在运行时出现类型相关的错误。这可以减少调试时间并提高代码质量。

  2. 静态类型(Static Typing):TypeScript 是静态类型语言,类型信息在编译时确定并保持不变。变量、函数参数、函数返回值等都需要声明类型,并且在编译过程中进行类型检查。

  3. 类型推断(Type Inference):TypeScript 具有类型推断功能,可以根据变量的赋值推断出其类型,从而减少手动的类型注解。这使得代码编写更加简洁和灵活,同时仍保持类型安全。

  4. 结构类型化(Structural Typing):TypeScript 的类型系统是基于结构类型化(structural typing),而不是基于名义类型(nominal typing)。这意味着类型是根据其结构而不是名称进行比较。只要两个类型的结构相似,它们就被视为兼容的类型。

  5. 泛型(Generics):TypeScript 支持泛型编程,允许在函数、类和接口中使用类型参数。这样可以编写更通用和可复用的代码,使代码更加灵活和类型安全。

  6. 类型别名(Type Aliases):TypeScript 允许创建类型别名,通过给类型赋予一个新名称来简化复杂类型的表示。类型别名可以提高代码的可读性和可维护性。

  7. 联合类型和交叉类型(Union Types and Intersection Types):TypeScript 提供了联合类型(Union Types)和交叉类型(Intersection Types)的支持。联合类型表示一个值可以是多个类型之一,而交叉类型表示一个值同时具有多个类型的属性。

  8. 类型保护(Type Guards):TypeScript 提供了类型保护的机制,通过一些语法和模式来缩小变量的类型范围,从而在特定的代码块中获取更具体的类型。这可以提高代码的可读性和类型安全性。

  9. 可选类型和默认值(Optional Types and Default Values):TypeScript 允许将属性或函数参数标记为可选的,并提供默认值。这使得在使用对象或函数时可以选择性地省略某些属性或参数。

  10. 类型注解和类型断言(Type Annotations and Type Assertions):TypeScript 允许开发者使用类型注解显式地为变量、函数参数等添加类型信息。同时,还可以使用类型断言来告诉编译器某个值的具体类型,以便在需要时进行编译时类型检查。

四、详细

数组

在 TypeScript 中,有多种创建数组类型的写法。下面是一些常见的数组类型的创建写法:

  1. 类型后缀标注法:
let arr: number[] = [1, 2, 3]; // 数字数组
let strArr: string[] = ["hello", "world"]; // 字符串数组
let boolArr: boolean[] = [true, false]; // 布尔数组
  1. 使用泛型数组类型:
let arr: Array<number> = [1, 2, 3]; // 数字数组
let strArr: Array<string> = ["hello", "world"]; // 字符串数组
let boolArr: Array<boolean> = [true, false]; // 布尔数组
  1. 使用元组类型:
let tuple: [number, string, boolean] = [1, "hello", true];
  1. 使用类型别名:
type NumberArray = number[];
let arr: NumberArray = [1, 2, 3]; // 数字数组

type StringArray = Array<string>;
let strArr: StringArray = ["hello", "world"]; // 字符串数组

猜你喜欢

转载自blog.csdn.net/weixin_35691921/article/details/131418519