这句ts中,extends后面语句读不懂

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

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

  1. extends后面的对象是什么意思
  2. 等号后面的空对象又是什么意思
阅读 8.5k
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


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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
Microsoft
子站问答
访问
宣传栏