interface effectInfo {
/** 起点 */
source?: Vector
/** 终点或目标方向 */
destination?: Vector
/** 施法者 */
caster?: unit
/** 目标者 */
target?: unit
/** 特效模型 */
model: 自定义模型
/** 特效句柄 */
readonly _handle: effect
/** 搜索半径 */
width: number | undefined
}
希望实现的类型判断是把caster
和target
看作一对,source
和destination
一对,当传参提供了其中一个时,也必然要提供另一个。
当提供了source
时,那destination
也必须要有,反之亦然。
let a:effectInfo = { // 允许这样
model:'aaa.mdl',
width:20,
caster:unit1,
target:unit2
}
let b:effectInfo = { // 报异常,缺少target,缺少destination
model:'aaa.mdl',
width:20,
source:unit1,
target:unit2
}
let c:effectInfo = { // 允许这样
model:'aaa.mdl',
width:20,
}