对象键入,其中值是键数组或空数组

时间:2019-11-14 21:05:39

标签: typescript

我正在寻找这样的对象:

const example = {
  'meow': [],
  'woof': [],
  'quack': [],
  'all': ['meow', 'woof', 'quack'],
  'meowWoof': ['meow', 'woof'],
}

以上将是有效的。您会看到它是元的,因为值必须是数组,而值是对象本身的键。

但这不是因为DOGS不是密钥。

const example = {
  'meow': [],
  'woof': [],
  'quack': [],
  'all': ['meow', 'DOGS', 'quack'],
  'meowWoof': ['meow', 'woof'],
}

我可以将此对象包装在函数中以使输入正常工作。

这可能吗?

1 个答案:

答案 0 :(得分:1)

我会使用像这样的通用辅助函数:

const asExample = <T extends Record<keyof T, Array<keyof T>>>(t: T) => t;

它表现出您想要的样子:

const example = asExample({
    'meow': [],
    'woof': [],
    'quack': [],
    'all': ['meow', 'woof', 'quack'],
    'meowWoof': ['meow', 'woof'],
}); // okay

const badExample = asExample({
    'meow': [],
    'woof': [],
    'quack': [],
    'all': ['meow', 'DOGS', 'quack'],  // error here
    'meowWoof': ['meow', 'woof'],
});

希望有帮助。祝你好运!

Link to code