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对象以及联合类型的深入实战

在分配之前使用变量'test' - Typescript

打字稿:如何制作接受对象的类型,其键匹配通用但所有值都是值参数的映射函数

TypeScript 中每个键的泛型映射对象类型

如何从 Typescript 中的固定对象的键创建映射类型

TypeScript:将对象条目映射到类型