H5W3
当前位置:H5W3 > 其他技术问题 > 正文

【前端问题精选】 这句ts中,extends后面语句读不懂

interface Match<Params extends { [K in keyof Params]?: string } = {}> {
  params: Params;
  isExact: boolean;
  path: string;
  url: string;
}

文档太散,查不到这种用法,请教

  1. extends后面的对象是什么意思
  2. 等号后面的空对象又是什么意思

回答:

  1. extends后面的对象是什么意思

    • 这个后面的类型是一个自带约束的泛型, 意思是这个泛型满足对象的所有属性都是string
  2. 等号后面的空对象又是什么意思

    • 对于泛型 Params类型 的一个默认值 属性为空的类型, 意思就是你可以在使用整个Match的时候不用定义泛型Params,而默认为 params: 为空对象类型
// 有默认泛型时,可以这样写
let mat: Match;
// 没有默认时,不可以上面那么写,需要下面这样
let mat: Match<{a: string}>

回答:

如题✏️:
interface Match<Params extends { [K in keyof Params]?: string } = {}>
这一行你可以理解为 Match 接收一个类型,他与泛型Params目的一致, key对应的vstring类型


看例子?:
此时你有一个这样的类型

type school = {
    name: string,
    className: string
}

// 我们可以这样使用
// 注意:题目中 [K in keyof Params]?: string 明确要求类型必须都为string类型,所以我们要满足它
let someVariv: Match<school> = {
    params: {
        name: 'jack ma',
        className: '7年级一班'
    },
    inExact: true,
    path: '../todo',
    url: 'google'
}

拓展篇?:
可将 [K in keyof Params]?: stringstring改为any,方便接收多元化参数
没有类型传入时:params: Params 建议改为 非必选 params?: Params


如有不是,还请各位大佬指教啦?

本文地址:H5W3 » 【前端问题精选】 这句ts中,extends后面语句读不懂

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址