typescript - 将接口的属性值限制为对象的值之一
问题描述
IExpression
如果接口类型的对象具有不是值之一的expressions.null.property
orexpressions.video.property
值,我希望 TypeScript 引发错误PROPERTIES
。
我有这个对象:
const PROPERTIES = {
ANCHOR_POINT: 'anchorPoint',
POSITION: 'position',
X_POSITION: 'xPosition',
Y_POSITION: 'yPosition',
Z_POSITION: 'zPosition',
SCALE: 'scale',
ORIENTATION: 'orientation',
ROTATION: 'rotation',
X_ROTATION: 'xRotation',
Y_ROTATION: 'yRotation',
Z_ROTATION: 'zRotation',
OPACITY: 'opacity',
};
我想将 IExpression.expressions.null.property 限制为 PROPERTIES 值之一。
以下是我试图让它发挥作用的方法:
type NULL_OR_VIDEO = "null" | "video";
interface IExpression {
name: string;
targets: FILE[];
expressions: {
[value in NULL_OR_VIDEO]: {
property: PROPERTIES;
expressionText: string;
}
}
}
它虽然抛出错误。我知道我可以这样做:
interface IExpression {
name: string;
targets: FILE[];
expressions: {
[value in NULL_OR_VIDEO]: {
property: 'rotation' | 'xRotation'| 'opacity' ...
expressionText: string;
}
}
}
但我不想。
解决方案
我将其转换PROPERTIES
为枚举:
enum PROPERTIES {
ANCHOR_POINT = 'anchorPoint',
POSITION = 'position',
X_POSITION = 'xPosition',
Y_POSITION = 'yPosition',
Z_POSITION = 'zPosition',
SCALE = 'scale',
ORIENTATION = 'orientation',
ROTATION = 'rotation',
X_ROTATION = 'xRotation',
Y_ROTATION = 'yRotation',
Z_ROTATION = 'zRotation',
OPACITY = 'opacity',
};
现在像这样工作:
interface IExpression {
name: string;
targets: FILE[];
expressions: {
[value in NULL_OR_VIDEO]?: {
property: PROPERTIES;
expressionText: string;
}
}
}
推荐阅读
- android - 导航组件(RecyclerView)
- powershell - PS1 上的参数缺少参数
- python - 安装 scrapy 错误 - 当我尝试安装 scrapy 时,我收到以下错误,我不知道如何修复它:
- css - 我可以在段落中的单个单词后面添加图像吗
- mysql - Mysql NodeJS拒绝对重复数据库的声音查询
- github-enterprise - Github Enterprise API - 确定用户是否处于休眠状态?
- javascript - 单击添加更多按钮后如何从文本框中获取多个值?
- c# - 如何使用 C# 中的 Lambda 表达式仅返回没有来自另一个表的行的行
- asp.net-core-2.1 - 如何阻止特定国家访问我的网站?.Net 核心
- r - 如何通过子字符串优雅地拆分列表元素中的字符串数组?