我有一个像这样的界面:
interface Foo {
foo(a: string, b:number): string | number;
bar(a: boolean): number;
}
我需要一个映射类型,该映射类型在成员上具有相同的呼叫签名,并且具有不同的返回类型。像这样:
// this is not a real type
interface_like_this "FooBoolean"
foo(a: string, b: number): boolean
bar(a: boolean): boolean;
必须是这样的,保留呼叫签名并更改返回类型
type ToBoolean<T> = { [...]: boolean };
我将这样使用:
const fooBar: ToBoolean<Foo> = {
foo(a: string, b: number){ return true }, // type check OK
bar(a: number) { return false } // type check FAIL, wrong 'a' parameter type
}
我希望我很清楚:)
答案 0 :(得分:0)
使用条件类型:
type ToBoolean<T> = {
[K in keyof T]: T[K] extends (...args: any[]) => any
? (...args: Parameters<T[K]>) => boolean
: never;
};
它需要在TypeScript> = 3.1中可用的Parameters
类型。如果您使用的是旧版本,则可以自己创建:
type Parameters<T extends (...args: any[]) => any> =
T extends (...args: infer P) => any
? P
: never;