javascript - Jak bezpečně deklarovat vnořené typy objektů v TypeScriptu
Chci vytvořit objekt, který obsahuje skupiny, a skupiny mají soubory. Vybratelné soubory mají rozhraní a chci dostat chybu, pokud skupina neobsahuje své soubory.
export interface Group_A_Files {
'movie': string
'image': string
'other': string
}
export interface Group_B_Files {
'image': string
}
export const groups = {
'groupA' : {
'someField': 'some value',
'files': <Group_A_Files> {
'movie': '',
'image': '',
} // I want to get an error from the IDE, because other is required in Group_A_Files, but not set by me
},
'groupB' : {
'someField': 'some value',
'files': <Group_B_Files>{
'image': '',
'bla': ''
} // I want to get an error from the IDE, because bla is not defined in Group_B_Files
}
}
Komentoval jsem, kde bych měl získat chybovou zprávu od IDE, ale nedostávám ji. Jaký je pro to správný postup?
Mám spoustu skupin a 5 typů souborů skupin. Tyto jsou konstanty a jsou pevně zakódované v aplikaci.
Nechci definovat celé skupiny v rozhraní a pak je také deklarovat, jen abych dostal chybová hlášení od IDE, rád bych typ definoval, když ho nastavím.
Tady je ukázka
Odpověď č. 1
Momentálně provádíte přetypování, místo toho chcete tvrdit typy, což lze udělat pomocí malé pomocné funkce:
function <T> assert(el: T) { return el; }
Použitelné jako:
'groupB' : {
'someField': 'some value',
'files': assert<Group_B_Files>({
'image': '',
'bla': ''
}),
}
Jinak byste mohl zadat celý objekt:
interface IGroups {
groupA: {
someField: string;
files: Group_A_Files;
}
};
export const groups: IGroups = {
'groupA' : {
'someField': 'some value',
'files': <Group_A_Files> {
'movie': '',
'image': '',
}
},
};
