我有這兩個介面
interface PersonRequirements{
user:string,
password:string,
id:number
}
export interface Requirement<R> {
name: keyof R & string,
save: () => any,/* I want this return type to be same as return type of founded key in R*/
}
這是我在其他地方的用例
const idRequirement:Requirement<PersonRequirements>={
name:"id",
save:function ():number/* I want this return type to be same as id's return type(number) but in a generic type safe way*/{
//
}
}
我想讓save()回傳型別與 id 的回傳型別相同,但是以通用型別安全的方式,我該怎么做?
uj5u.com熱心網友回復:
您可以宣告另一個在編譯時采用屬性名稱的通用引數。
export interface Requirement<R, N extends keyof R & string> {
name: N; // this will force the name property to be the same as being passed in
save(): R[N];
}
然后像這樣使用它
const idRequirement: Requirement<PersonRequirements, "id"> ={
name: "id",
save: () => 0
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/437834.html
標籤:javascript 打字稿 仿制药
上一篇:如何使用動態泛型撰寫結構?
