我想用可选的字符串值定义一个接口。类似于:
interface IEntity {
values: ['RemainingUnits', 'ActualUnits', 'PlannedUnits']
}
但是这个界面有问题:
const entity0: IEntity = { values: ['PlannedUnits'] }; // => Error
const entity1: IEntity = { values: ['RemainingUnits', 'ActualUnits'] }; // => Error
const entity2: IEntity = { values: ['PlannedUnits', 'RemainingUnits', 'ActualUnits'] }; // => Error
那么,有没有办法编写正确的接口来避免上面的错误呢?
完全没有重复的字符串并且不为空
5条答案
按热度按时间a11xaf1n1#
可能:
3ks5zfa02#
您可以尝试对特定字符串使用
<>
。另外,受Nenroz的启发,我认为你也可以使用
type
来分组字符串。当你有很多不同的东西时,很好用。g2ieeal73#
我不认为这是类型系统的作用。通过将其作为编译时规则(这是Typescript的所有类型)来强制执行,可以确保Typescript只允许它在编译时可以完全确定的值。这将不允许对数组进行就地修改,即使是符合您的规则的数组。这个接口的可用性成本可能会超过它为API的使用者提供的错误捕获值。
此外,JavaScript有一些有效的方法来强制执行非重复的行为(集合或对象键),这对你想要的东西来说是非常自然的,并且还允许用户想要的运行时行为(例如能够在传递列表之前修改它)。
如果你真的想要这个,你需要把它拼出来:
打字游戏场
juud5qan4#
它应该适合你的情况:
mkshixfv5#
这是一个固定长度的数组类型(又名元组),在固定位置有可选的文字字符串类型。
不允许重复。我看到的唯一缺点是,如果您只想提供后面的值,则必须从
undefined
开始。这是没办法的事示例: