TypeScript:读取对象中值的通用类型

卢卡斯

我有这个界面:

interface Api {
  state: Converter<State>;
  water: Converter<Water>;
  version: Converter<Versions>;
}

我有一个函数叫做 write

write(name, value);

现在我要实现的是,value取决于第一个参数(name的类型应该是Converter的泛型

因此,如果我打电话write("state", value)->value应该是State这同样适用于"water""version"

write("state, value);    // value should be type of State
write("water", value);   // value should be type of Water
write("version", value); // value should be type of Versions

我像这样实现了第一个参数:

write(name: keyof Api, value: ???)

我发现我可以得到相应的值,keyof Api就像这样:

write<K extends keyof Api>(name: K, value: Api[K])

但这给我Converter<State>"state"有没有办法可以访问泛型Converter

里塔吉

我不知道这是否有帮助,因为我不确定您的Converter界面是什么样的。

但是有了这个:

interface Converter<T> {
  converter: T;
}

而这些接口的StateWaterVersion

interface State {
  state: string;
}

interface Water {
  water: string;
}

interface Version {
  version: string;
}

你可以这样做:

function write<K extends keyof Api>(name: K, value: Api[K]["converter"]) {}
write("state", { state: "x" }); // Works

write("water", { state: "x" }); // Argument of type '{ state: string; }' is not assignable to parameter of type 'Water'.

write("water", { water: "x" }); // Works

但这会向您的Converter界面添加一个属性

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章