打字稿映射类型键/值
问题描述:
我想要写与接受来自对象或类型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"'.
我还能如何做到这一点,而无需其他模块类型和对象,我需要导出/导入?
答
你不能在运行时使用类型别名,没有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。