是否可以在打字稿中的对象中使用泛型?

时间:2020-02-26 21:40:26

标签: typescript

我正在尝试根据另一个值的类型来设置一个对象值的类型,我很好奇是否可行。鉴于:

{"id":"is_enabled","path":"admin/sso_saml","_elementType":"field"}

有没有办法在打字稿中做到这一点?只有将泛型传递给类型声明,我才能使它起作用。但是我知道在功能上可以推断出这一点。

1 个答案:

答案 0 :(得分:1)

是否可以在打字稿中的对象中使用泛型?

是的。这是工作代码(您很接近):

export type KeyType = 'string' | 'number'
type ValueType = { string: string, number: number }

type TestObject<T extends KeyType> = {
  key: T
  value: ValueType[T]
}

const testA: TestObject<'string'> = { key: 'string', value: 'hello' } // should be ok
const testB: TestObject<'number'> = { key: 'number', value: 2 } // should be ok
const testC: TestObject<'string'> = { key: 'string', value: 2 } // Error: value needs to be string

显示错误: enter image description here

更多

在使用泛型作为类型注释时,您需要指定泛型,例如TestObject<'number'>