【前端问题精选】 这句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


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

以上是 【前端问题精选】 这句ts中,extends后面语句读不懂 的全部内容, 来源链接: www.h5w3.com/134359.html

回到顶部