【发布时间】:2020-09-08 17:30:30
【问题描述】:
给定:
class Foo {
constructor(readonly id: number, readonly value: string) {}
}
class Bar {
constructor(readonly id: number, readonly value: string, readonly name: string) {}
}
interface Store {
foo: Foo;
bar: Bar;
}
以下函数不会从 Store 的映射类型推断联合类型。
const foo1 = <K extends keyof Store, E extends Store[K]>() => {
let result: E = undefined!;
result = new Bar(1, 'some-value', 'some-name') // Type 'Bar' is not assignable to type 'E'
};
但是:
const foo2 = () => {
let result: Foo | Bar = undefined!;
result = new Bar(1, 'some-value', 'some-name'); // Ok
};
编译正常。
为什么会发生这种情况,是否有替代方法? :)
【问题讨论】:
-
考虑
foo1<'foo', Foo>();。在这种情况下,您将Bar放入Foo类型的变量中。
标签: typescript typescript-generics