如何在对象上键入保护get方法

时间:2019-09-02 11:50:03

标签: typescript

我有一个对象,其中包含从get方法访问的值。我想输入get方法,以便它推断键的返回值。

我正在使用TS 3.6.2,并且使用了如下所示的使用重载的工作类型:

interface Values {
    foo: FooType;
    bar: BarType;
    baz: BazType;
}

interface ObjectWithGetter {
   get(key: 'foo'): Values['foo'];
   get(key: 'bar'): Values['bar'];
   get(key: 'baz'): Values['baz'];
}

似乎我应该可以将重载的get类型压缩为类似的内容:

get(key: keyof Values): Values[key];

但是在这种情况下,key是变量,这不是有效的类型。

有没有办法做到这一点?

谢谢。

1 个答案:

答案 0 :(得分:2)

您需要的是泛型

interface ObjectWithGetter {
   get<K extends keyof Values>(key: K): Values[K];
}

通过引入通用参数K,您可以“重用”用于选择正确返回类型的键。