TypeScript 映射类型键/值
Posted
技术标签:
【中文标题】TypeScript 映射类型键/值【英文标题】:TypeScript Mapped Type Key/Values 【发布时间】:2017-08-08 09:30:59 【问题描述】:我想编写一个带有参数类型保护的函数,它接受来自对象或类型的 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"'.
如果没有必须导出/导入到其他模块的类型和对象,我还能如何做到这一点?
【问题讨论】:
【参考方案1】:您不能在运行时使用类型别名,没有 js 等效项。
第二个 sn-p 中的 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。
【讨论】:
以上是关于TypeScript 映射类型键/值的主要内容,如果未能解决你的问题,请参考以下文章
JS超集对TypeScript的Map对象以及联合类型的深入实战