Pretvori tipove svojstava sučelja u TypeScriptu u uniju
Imam ovaj sučelje i želio bih generirati novi tip iz tipa ključeva koje sadrži.
interface SomeType {
abc: string;
def: number;
ghi: boolean;
}
Upiši za generiranje:
type SomeOtherType = string | number | boolean
Je li ovo moguće u TypeScriptu?
Odgovor #1
Možete pokušati indeksirati pomoću operatora keyof:
interface SomeType {
abc: string;
def: number;
ghi: "sdf";
}
type t = SomeType[keyof SomeType];
Tip t će se pretpostaviti kao unija tipova koja proizlazi iz vrijednosti objekta:
https://www.typescriptlang.org/play?#code/JYOwLgpgTgZghgYwgAgMoHsC2EAqBPABxQG8AoZZOAIwQC5kBnMKUAcwG5zkATCGekAFdMVaJwqsAFsHoAiBtxizOAX1KkwhFGGQBeNFlxaA2gGsIedDAPZ8RALrsgA
Odgovor #2
Možete koristiti trik za generiranje vrijednosti sučelja:
interface SomeType {
abc: string;
def: number;
ghi: boolean;
}
//First generate a type that works as a "valueof" (similar to keyof)
type ValueOf<T> = T[keyof T];
//Then obtain the values
type Values = ValueOf<SomeType> // Values = string | number | boolean
//ValueOf re-usable component, however it is enough also SomeType[keyof SomeType]
//If you need the keys on the other hand "keyof" is enough:
type Keys = keyof SomeType // Keys = 'abc' | 'def' | 'ghi'
