【发布时间】:2020-01-29 22:22:20
【问题描述】:
给定一个包含调用签名和附加属性的类型,例如:
export interface Foo<T> {
(arg: T): T;
doFoo(): void;
}
我们如何键入一个实现这种类型的调用签名的函数?
// Property 'doFoo' is missing in type '(arg: string) => string'
// but required in type 'Foo<string>'.
const foo: Foo<string> = (arg: string) => arg;
排除调用签名的一种方法是使用映射类型,因为调用签名不会在keyof Foo<T>中:
type FooProperties<T> = { [K in keyof Foo<T>]: Foo<T>[K] };
const foo: FooProperties<string> = {
doFoo() {}
};
但是我们怎样才能得到相反的结果,即只有调用签名所以我们可以写如下?
type FooSignature<T> = /* …? */
const foo: FooSignature<string> = (arg: string) => arg;
【问题讨论】:
标签: typescript