如何从对象中提取类型

moh*_*haq 7 typescript

我有一张地图:

const Map = {
  key1: 'value1',
  key2: 'value2'
}
Run Code Online (Sandbox Code Playgroud)

我想value1 | value2使用上面的对象创建一个类型。是否可以不重复值?

我尝试过type MyType = Map.key1 | Map.key2,但它抛出以下错误: Cannot find namespace 'Map'

Ale*_*yne 14

首先你必须声明MyMap变量as const

const MyMap = {
  key1: 'value1',
  key2: 'value2'
} as const
Run Code Online (Sandbox Code Playgroud)

这告诉打字稿对象中的字符串文字应该是特定的常量,而不是仅仅推断为string

现在您可以使用关键字获取该对象的类型typeof,然后通过该类型自己的键对该类型进行索引以获取所有可能的值:

type MyMapValues = typeof MyMap[keyof typeof MyMap] // "value1" | "value2"

const a: MyMapValues = "value1"
const b: MyMapValues = "value2"

// Error: Other values not allowed:
const c: MyMapValues = "value3"
Run Code Online (Sandbox Code Playgroud)

操场