2017-08-11 5 views
1

Je suis en train de créer un grand objet dont les valeurs sont limitées à seulement 3 types: Texture, Geometry, ScriptTapuscrit: limiter les types de valeurs objet

Mon objet ressemblerait à quelque chose comme ceci:

var assets: Assets = { 
    sky: <Texture>, 
    ground: <Texture>, 
    city: <Geometry>, 
    people: <Script>, 
    cars: <Script>, 
    sun: <Circle> // <--This should fail because it's not one of the 3 types 
    //... 
} 

Comment puis-je déclarer l'interface Assets afin que la valeur de chaque paire valeur/clé soit limitée à ces 3 types? J'ai essayé à commencer par:

interface Assets{ 
    key: Texture | Geometry | Script; 
} 

mais il pauses lorsque j'attribue

this.assets = {sky: new Texture()} 

Parce qu'il est attendre que key au lieu de sky. Existe-t-il un moyen d'y parvenir sans imbriquer des objets dans des objets?

Répondre

2

Que diriez-vous:

type Assets = { 
    [key: string]: Texture | Geometry | Script; 
} 

Ce genre permettra de clés de chaîne et les valeurs de l'un des types que vous avez demandé.

Plus sur le sujet: Indexable Types

+0

C'est tout! J'avais essayé et 'key: string: Texture ...' et qui sait quoi d'autre. J'essaie toujours de comprendre la différence entre <> et [] parfois. – Marquizzo

+1

'<>' sont pour les génériques (et l'affirmation de type) seulement –

+1

J'ai édité ma réponse avec un lien vers les documents pour ce sujet. –