从keyof type typescript指定类型

时间:2017-11-13 23:31:23

标签: typescript

我有一个功能

.Select(g => new
{
    Book = g.Key.Book,
    Chapter = g.Key.Chapter,
    MinTimesRead = g.Min(d => d.TimesRead),
    Items = g.Select(i => i)
});

如果我将其称为T newText<T, U extends keyof T>(name: keyof T, value: T[U]){...} ,则类型应为{ one: Function, two: string }一个,'one' | 'two'为值。

这非常接近我想要的但是当我指定一个名称时,我希望该值是该键的类型。因此,如果我Function | string,我希望将newText('one',视为我唯一的价值选择,并且Function应该抛出错误。

这在打字稿2.6中是否可行?

解决方案的完整用例

newText('two', () =>{})

1 个答案:

答案 0 :(得分:1)

  

因此,如果我执行newText('one',我希望将Function视为我唯一的值选项,并且newText('two',()=&gt; {})应该抛出错误。

简单:

type T = { one: Function, two: string };
declare function newText<KEY extends keyof T>(name: KEY, value: T[KEY]): any;

newText('one', () => null); // Okay
newText('two', () => null); // Error 

干杯