Skip to content

TypeScript

泛型

  1. 可以通过泛型占位类型,再调用函数时确定类型
  2. 给对象使用泛型
  3. 请求封装,给Promise返回类型加上泛型
  4. 泛型约束,访问对象的属性,必须传入已有的key
  5. 给对象的属性使用泛型
ts
function build<T>(a: T, b: T): Array<T> {
  return [a, b];
}

function build<T,U>(a: T, b: U): Array<T | U> {
  return [a, b];
}

build(1, 2);
build('a', 'b');
ts
interface User<T>{
    name:T
}

let a:User<string> = {name:'a'}
ts
const axios = {
    get<T>(url:string):Promise<T> {
        return new Promise<T>((resolve, reject) => {
            resolve(obect)
        })
    }
}

interface User {
    name:string
}

axios.get<User>('/user').then(res => {
    console.log(res.name)
})
ts
const object = {
    name: 'modify',
    age: 18
}

function get<T extends object, K extends keyof T>(obj:T, key:K){
    return obj[key]
}
ts
interface Data {
  name: string;
  age: number;
  sex: string;
}

type Options<T extends object> = {
  [Key in keyof T]?: T[Key];
}

type DataOption = Options<Data>;

区分interface和type

对比点interfacetype
核心用途定义对象 / 类的结构定义任意类型别名(对象、联合、交叉、元组等)
能否重复定义同名会自动合并同名会报错,不可重复
继承 / 扩展使用 extends 继承使用 & 交叉类型实现扩展
类实现可被 class implements仅对象类型可实现,联合类型不行
支持类型只支持对象、函数、类结构支持一切:基础类型、联合、交叉、元组、映射类型等
项目习惯组件 Props、API 数据结构、类接口工具类型、联合类型、工具函数类型

自定义 Omit 类型

ts
/**
 * 自定义 Omit 实现
 * @template T - 原始对象类型
 * @template K - 需要剔除的键名联合类型 (必须 extends keyof T)
 */
type MyOmit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;

By Modify.