【发布时间】:2019-07-02 10:11:28
【问题描述】:
我刚刚从this question的答案中学习了使用判别元组作为参数的方法,但是当我在一些旧代码上尝试这个概念时,我发现我无法让它按预期工作。考虑以下示例:
class Fraction {
constructor(r: Rational) {
/* Not important */
}
}
type Rational = number | Fraction;
class Couple {
private _x: Fraction;
private _y: Fraction;
constructor(c: Couple);
constructor(x: Rational, y: Rational);
constructor(...r: [Couple] | [Rational, Rational]) {
if(r[0] instanceof Couple) r = [r[0]._x, r[0]._y]; // pay attention here
this._x = new Fraction(r[0]);
this._y = new Fraction(r[1]);
}
}
我希望,在上述行之后,TypeScript 应该得出结论,r 只能是 [Rational, Rational] 类型,并且接下来的两行应该没有问题,但事实并非如此。为什么会这样?如何在仍然使用元组思想的同时解决这个问题?
【问题讨论】: