有索引签名和条件的打字稿问题

时间:2019-10-05 09:19:14

标签: typescript

我是TS的新手,在理解为什么以下示例不起作用时遇到了一些麻烦。我正在尝试创建一种类型来定义执行以下操作的对象:

  1. 具有一个以联合类型的每个值命名的属性 Requirement(例如isAdminisTenantisGuest)。每个属性的值的类型 应该是一个数字。
  2. 具有一个,多个或没有其他属性(例如IsRegistered)。这些属性中任何一个的值类型必须是Requirement个值的数组。

export type Requirement = "isAdmin" | "isUser" | "isCustomer";
export type fn = (route: string) => boolean;
export type RequirementCollection = { [name in string & Requirement]: Requirement extends name ? number : string[] };

let requirements: RequirementCollection = {
    'isAdmin': 1,
    'isTenant': 2,
    'isGuest': 3,
    'IsRegistered': ['isAdmin', 'isTenant'],
    'SomeOtherAlias':'isAdmin' // <-- THIS SHOULD FAIL! (not a string array)
};

我已经尝试了很多方法来实现这一目标,但我感觉这里缺少一些基本知识。任何帮助将不胜感激!

0 个答案:

没有答案