javascript 禁止跳过未定义的可选参数

ddrv8njm  于 2023-01-11  发布在  Java
关注(0)|答案(1)|浏览(133)

我可以(以某种方式?)* 禁止 * 在 typescript 中跳过可选参数吗?

class MyList {
  constructor(
    public head?: number,
    public tail?: MyList
  ){}
}

const L0 = new MyList();              // <--- empty element list - good !
const L1 = new MyList(888);           // <--- single element list - good !
const L2 = new MyList(777, L0);       // <--- general list - good !
const L3 = new MyList(undefined, L1); // <--- forbid this

我想在我的列表上 * 静态地 * 强制执行以下属性:

  • 如果headundefined,那么tail也是undefined(并且列表为空)

有没有TypeScript技巧可以实现这一点?(这个问题是this question的“补充”)

vmdwslir

vmdwslir1#

你可以使用overloading,它对TS中的方法和函数都有效,基本思想是你有一个函数/方法实现,有所有可能的参数,你可以指定函数参数的不同组合(就像你的情况一样,你可以有0个参数,只有第一个参数,或者两个都有)。

class MyList {
  constructor()
  constructor(head: number)
  constructor(head: number, tail: MyList)
  constructor(
    public head?: number,
    public tail?: MyList
  ){}
}

const L0 = new MyList(888);
const L1 = new MyList(777, L0);   
const L2 = new MyList(undefined, L1); // This will show error: Argument of type 'undefined' is not assignable to parameter of type 'number'.

相关问题