具有接口类型之一的变量?

时间:2019-07-04 13:08:43

标签: typescript

我在想;这样可能吗?

interface User {
  name: string;
  age: number;
}

// The syntax User['*'] doesn't exist, this is just an example
const user: User['*'] = 'Bob'; // No error
const user: User['*'] = 32; // No error
const user: User['*'] = true; // Error

我知道“或”(|),但是如果User接口具有很多类型化的属性,这会变得非常困难。

1 个答案:

答案 0 :(得分:2)

您可以对keyof T使用索引类型查询,以获取接口中所有可能值的并集:

interface User {
   name: string;
   age: number;
}

const userValue1: User[keyof User] = 'Bob'; // No error
const userValue2: User[keyof User] = 32; // No error
const userValue3: User[keyof User] = true; // Error

如果您经常使用此工具,则助手类型可能会有所帮助:

type ValueOf<T> = T[keyof T]