typescript - Hur får man unionstypen av värdena i ett gränssnitt (med strängenum)?
Hur kan jag uppnå följande?
Givet :
enum FooEnum1 {
Foo = "foo",
};
enum FooEnum2 {
Foo = 1,
};
interface FooInterface {
foo1 : FooEnum1,
foo2 : FooEnum2,
foo3 : string,
foo4 : number,
};
Jag skulle vilja skapa följande unionstyp: FooEnum1 | FooEnum2 | string | number. Denna typ är unionstypen för gränssnittets värden.
Jag får inte det förväntade resultatet med följande:
type FooInterfaceValuesType=FooInterface[keyof FooInterface] -> string | number
Om jag ändrar gränssnittet som:
interface FooInterface {
foo1 : FooEnum1,
foo2 : FooEnum2
};
FooInterfaceValuesType blir FooEnum1 | FooEnum2
Vad gör jag för fel? Tack.
Svar #1
Jag har inte tillräckligt med rykte för att kommentera, men håller med kommentarerna om att det egentligen inte fungerar.
Låt oss säga att du vill ha en union av två bokstavliga strängar, du kan göra det med type U="a" | "b". När du har type U="a" | "b" | string, blir U bara string eftersom det egentligen inte är meningsfullt, eftersom "a" och "b" också är strängar.
Åter till ditt gränssnitt, foo1 kan endast tilldelas med FooEnum1.Foo vilket är en litteral sträng av "foo". Precis som typen U ovan, när du skapar en union av "foo" och sträng, blir det bara en sträng. Samma gäller för FooEnum2.Foo och nummer.