Próbuję utworzyć typ ogólny, który pobiera nazwy właściwości i typy właściwości z typu i używa ich do utworzenia typu ujednoliconego związku. Na przykład:Tworzenie dyskryminowanej unii przy użyciu nazw właściwości innego typu
type FooBar = {
foo: string;
bar: number;
};
będzie mapować do:
type FooBarPair = {
key: "foo",
value: string
} | {
key: "bar",
value: number
}
Moja Pierwsza próba jest:
type Pairs<T> = {
[TKey in keyof T]: {
key: TKey;
value: T[TKey];
};
};
type Pair<T> = Pairs<T>[keyof T];
ale gdy próbuję zastosować to do rodzaju powyżej:
let pair: Pair<FooBar> = {
key: "foo",
value: 3
};
Spodziewałbym się błędu kompilacji, ale tam Chodź jeden. Kiedy sprawdzać typ Pair<FooBar>
Uważam to równa się:
{
key: "foo" | "bar";
value: string | number;
}
myślę, że może to być błąd w maszynopisie, ale chciałem zobaczyć, czy jest jakiś inny sposób na osiągnięcie tego celu.
Dzięki, zgadzam się, wydaje się, że to błąd, podniosę problem z maszynopisem. –
[Problem] (https://github.com/Microsoft/TypeScript/issues/15756) został zgłoszony. –
[Poprawka jest w zakładzie] (https://github.com/Microsoft/TypeScript/pull/18042) – artem