【问题标题】:When defining an index type, can I limit the number of properties that exist?定义索引类型时,我可以限制存在的属性数量吗?
【发布时间】:2020-10-01 08:32:00
【问题描述】:

Typescript 让我可以像这样在方法签名上设置索引类型:

function myFunc(dict: { [x: string]: string }) {
  ...
}

所以这个函数将只接受具有string 索引和string 值的对象——类似于C# 中的Dictionary<string, string>。我可以进一步限制这一点,以便只接受具有 single 字符串键和字符串值的对象吗?

即这样

const a = {
  x: 'val'
};

有效,但是

const b = {
  x: 'val1',
  y: 'val2'
};

不是吗?

显然我可以检查Object.keys() 的长度,但如果编译器可以强制执行它会很好。

【问题讨论】:

  • 您确定要使用字典吗?当有任何数量的属性事先不知道名称时,就会使用字典。也许function myFunc(key: string, value: string) 也能做到这一点?

标签: typescript


【解决方案1】:

我从不喜欢说 TypeScript 不能做某事,因为...它非常强大,并且有很多 晦涩的角落。 :-) 但我从未见过任何迹象表明它可以将索引类型限制为单个属性。

即使可以,但我认为在那种情况下我会使用[string, string],而不是索引类型:

function example(tuple: [string, string]) {
    console.log(tuple[0], tuple[1]);
}

example(['x', 'val']); // works

example(['x', 'val', 'y', 'val']); // fails

Playground link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 2011-02-11
    相关资源
    最近更新 更多