2017-03-17 1 views
0

Je veux écrire une fonction avec un agent de type de paramètre qui accepte la valeur d'une paire K/V à partir d'un objet ou d'un type ...tapuscrit mappée Type de clé/Valeurs

type VodTreeName = { 
    Movie: 'movie_vod', 
    TV: 'tv_vod', 
    VideoStore: 'video_store' 
}; 

function test(something: VodTreeName) { 
    // expecting something === 'movie_vod' 
} 

test(VodTreeName.Movie); 
// 'VodTreeName' only refers to a type, but is being used as a value here. 

--ou-- Sinon, comment puis-je faire cela sans avoir un type ET un objet que je dois exporter/importer vers d'autres modules?

Répondre

2

Vous ne pouvez pas utiliser un alias de type en cours d'exécution, il n'y a pas d'équivalent js pour cela.

La fonction test dans le 2ème extrait attend une clé de VodTreeName mais vous passez la valeur, il devrait être:

function test(key: keyof typeof VodTreeName) { 
    console.log(VodTreeName[key]); 
} 

test("Movie"); 

Si vous voulez l'utiliser comme ceci:

test(VodTreeName.Movie); 

Ensuite, vous cherchez essentiellement une énumération basée sur une chaîne, dans ce cas, vérifiez ce fil: Create an enum with string values in Typescript et ce numéro: Proposal: String enums.