【发布时间】:2018-09-13 22:57:51
【问题描述】:
我有一个 TypeScript 无法推断出其泛型的类型。
interface Foo<A> {
[name: string] : {
foo : A
}
}
function makeFoo<A>(foo: Foo<A>) : Foo<A>{
return foo
}
// Works fine when manually specifying the types
const manuallyTyped : Foo<string | number> = {
a: {
foo: '1'
},
b: {
foo: 3
}
}
// ERROR, Can't infer type as Foo<string | number>
makeFoo({
a: {
foo: '1'
},
b: {
foo: 3
}
})
最初,我使用下面的类型,但我想自己制作对象的值。当索引签名平坦时,推理工作得很好。
interface FlatFoo<B> {
[name: string] : B
}
function makeFlatFoo<B>(bar: FlatFoo<B>): FlatFoo<B>{
return bar
}
// Correctly has type FlatFoo<string | number>
const inferred = makeBar({
a: 'a',
b: 2
})
有没有人解释和/或建议让它发挥作用?
【问题讨论】:
标签: typescript