在某些情况下,我需要在Typescript中使用条件类型。我不确定100%是否可以使用我的方法来做到这一点,但我相信一定有办法。
在下面的示例中,我简化了代码。
type Friend = {
phoneNr: number;
};
type Enemy = {
howToAvoid: string[];
};
interface Names {
edward: Friend;
sam: Enemy;
}
const names: Names = {
edward: {
phoneNr: 1234,
},
sam: {
howToAvoid: ["don't go there", "dont do that"],
},
};
function select<T extends keyof typeof names>(arg: T): Friend | Enemy {
return names[arg];
}
console.log(select("edward"));
简而言之,函数select()
仅接受作为names
键的2个参数(爱德华兹和sam)。 names
包含一个人员列表,这些人员可以是Enemy
或Friend
。 select()
可以返回Enemy
或Friend
类型的对象。我知道这是两者之一,但是我不知道那是哪一个。
我想要的是能够知道select("edward")
总是返回类型为Friend
的对象,而select("sam")
总是返回类型为{{1}的对象}。所有这些都假设我事先知道谁是朋友,谁是敌人。
我们能做到吗?
为了说明(通过混合TS和JS语法),我想执行以下操作:
Enemy
非常感谢!
答案 0 :(得分:4)
您可以将参数作为类型的属性进行查找:
function select<T extends keyof typeof names>(arg: T): Names[T] {