Typescript 定义泛型类型时引用自己的属性
我试图创建一个类型,其中函数的返回值取决于另一个属性的值,这可能吗 据我所知,不可能在定义接口时引用它 另一种方法是将Typescript 定义泛型类型时引用自己的属性,typescript,Typescript,我试图创建一个类型,其中函数的返回值取决于另一个属性的值,这可能吗 据我所知,不可能在定义接口时引用它 另一种方法是将keyof T保存为某种类型(如K in keyof T或类似类型),以便以后在类中重用,但这似乎不起作用 这基本上就是我想要做的(尽管这显然不起作用): 然后我希望我的泛型类型被键入为 column: 'a', genericFunction: () => number 如果列更改为'b',则通用函数应返回字符串您可以执行以下操作: interface GenericT
keyof T
保存为某种类型(如K in keyof T
或类似类型),以便以后在类中重用,但这似乎不起作用
这基本上就是我想要做的(尽管这显然不起作用):
然后我希望我的泛型类型被键入为
column: 'a',
genericFunction: () => number
如果列更改为'b'
,则通用函数
应返回字符串
您可以执行以下操作:
interface GenericType<T, U extends keyof T> {
column: U;
genericFunction: () => T[U];
}
接口通用类型{
栏目:U;
通用函数:()=>T[U];
}
如何使用它:
interface AB {
a: number
b: string
}
const a: GenericType<AB, "a"> = {
column: "a",
genericFunction() {
return 12; // the compiler ensures the return value is a number
}
};
接口AB{
a:号码
b:字符串
}
常量a:GenericType={
专栏:“a”,
genericFunction(){
return 12;//编译器确保返回值是一个数字
}
};
或者,用另一种方式进行推理:
function makeGenType<T, U extends keyof T>(obj: T, propName: U): GenericType<T, U> {
return {
column: propName,
genericFunction() {
return obj[propName];
}
};
}
const genType = makeGenType({ a: 12, b: "ab" }, "b");
// Type of `genType` is: { column: "b", genericFunction: () => string }
函数makeGenType(obj:T,propName:U):GenericType{
返回{
列:propName,
genericFunction(){
返回obj[propName];
}
};
}
const genType=makeGenType({a:12,b:ab},b”);
//`genType`的类型是:{column:“b”,genericFunction:()=>string}
谢谢,但这还不到一半。如果使用上面的示例,将返回值键入number | string
。我只想要实际使用的钥匙类型。看来我想做的事情很棘手,我开始明白为什么它不起作用了。@Boivie,我编辑过。如果指定成员名称,则返回类型不是并集。
interface AB {
a: number
b: string
}
const a: GenericType<AB, "a"> = {
column: "a",
genericFunction() {
return 12; // the compiler ensures the return value is a number
}
};
function makeGenType<T, U extends keyof T>(obj: T, propName: U): GenericType<T, U> {
return {
column: propName,
genericFunction() {
return obj[propName];
}
};
}
const genType = makeGenType({ a: 12, b: "ab" }, "b");
// Type of `genType` is: { column: "b", genericFunction: () => string }