2017-03-17 206 views
0

我想要写与接受来自对象或类型A K/V对中的值的参数型保护的函数...打字稿映射类型键/值

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. 

- 或 -

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

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

test(VodTreeName.Movie); 
// Argument of type 'string' is not assignable to parameter of type '"Movie" | "TV" | "VideoStore"'. 

我还能如何做到这一点,而无需其他模块类型和对象,我需要导出/导入?

回答

2

你不能在运行时使用类型别名,没有js等价的。

在第二片段中test功能预计VodTreeName的关键,但你传递的价值,它应该是:

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

test("Movie"); 

如果你想使用它,像这样:

test(VodTreeName.Movie); 

然后你基本上寻找一个基于字符串的枚举,在这种情况下检查这个线程:Create an enum with string values in Typescript和这个问题:Proposal: String enums