【发布时间】:2018-09-08 19:09:40
【问题描述】:
我有以下示例对象:
let foo: Foo = {
'key1': { default: 'foo', fn: (val:string) => val },
'key2': { default: 42, fn: (val:number) => val },
// this should throw an error, because type of default and fn don't match
'key3': { default: true, fn: (val:string) => val }
}
界面应如下所示:
interface Foo {
[key: string]: { default: T, fn: (val:T) => any }
}
这当然行不通,因为没有定义T。
所以我想这样做:
interface FooValue<T> {
default: T;
fn: (val:T) => any;
}
interface Foo {
[key: string]: FooValue<?>
}
但我也陷入了困境。因为我无法定义FooValue的泛型类型。
如果我使用FooValue<any>,那么当然所有内容都输入为any。虽然那行不通。
我要确保default的类型和fn的参数类型始终相同。
有什么解决办法吗?还是不能这样做?
【问题讨论】:
-
interface Foo<T>呢? -
那我在做
let foo: Foo<???> = {...}的时候要定义T。然后我会为每个键设置通用类型。这样所有FooValue对象必须是同一类型。但正如您在示例对象中看到的那样:我希望每个键值都有不同的泛型类型。
标签: typescript generics type-inference typescript2.0 typescript-generics