我正在尝试在打字稿中创建以下界面:
type MoveSpeed = "min" | "road" | "full";
interface Interval {
min?: number,
max?: number
}
interface CreepPlan {
[partName: string] : Interval;
move?: MoveSpeed;
}
然而,这个语法是无效的。编译器说Property 'move' of type '"min" | "road" | "full" | undefined' is not assignable to string index type 'Interval'.
.
我正在使用编译器选项strictNullChecks:true
, 这就是为什么undefined
隐式包含在move?
key.
然而,这个语法是有效的:
type MoveSpeed = "min" | "road" | "full";
interface Interval {
min?: number,
max?: number
}
interface CreepPlan {
[partName: string] : Interval;
move: MoveSpeed; // 'move' is required
}
我想表达这样的想法:“CreepPlan 由字符串:间隔对组成,除了可选的“移动”键,它是字符串:移动速度对。”可以用打字稿表达吗?
您说所有属性CreepPlan
have Interval
- 当您写入时键入值:
interface CreepPlan {
[partName: string] : Interval;
}
即,任何和每个字符串索引可访问的属性CreepPlan
将是一个Interval
。这适用于move
同样,自从foo['move']
是相同的foo.move
.
然而,看着Interval
,它没有必需的结构:
interface Interval {
min?: number,
max?: number
}
该合同中没有必填字段,但它does需要一个对象。它会很乐意接受一个空对象,但它需要一些对象could have a min
and max
特性。
Your MoveSpeed
另一方面,类型允许undefined
:
房产“搬家”类型 '"min" | 「路」| “满”|不明确的'不可分配给字符串索引类型“Interval”。
Thus, Interval
必须是一个没有必需属性的对象(其中string
可以轻松见面)但不允许undefined
, which MoveSpeed
does allow.
您的类型是不相交的,但直到您解决它们一次或两次之前,这一点并不明显。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)