`extends Foo [keyof Foo]`的简写

时间:2018-02-18 11:26:23

标签: typescript

假设我有一些类型:

type A = { a : string };
type B = { b : string };

和具有属性的接口,其中每个属性都是一个类型:

interface Foo {
  a: A;
  b: B;
}

现在我的功能是通用的:

function foo<K extends Foo[keyof Foo]>(arg : K) : K {...}

有没有办法以较短的方式编写K extends Foo[keyof Foo]?像K extends property of Foo之类的东西?至少有些东西不会强迫我写两次Foo

2 个答案:

答案 0 :(得分:2)

您可以为此

定义自己的通用类型
type Properties<T> = T[keyof T]

然后像这样使用它

function foo<K extends Properties<Foo>>(arg: K): K

答案 1 :(得分:1)

您可以为Foo属性类型创建别名:

type FooProps = Foo[keyof Foo];
function foo<K extends FooProps>(arg: K): K { ... };