打字稿中是否有一种方法可以将可选参数仅在存在时传递给构造函数?

Is there a way in typescript to pass an optional parameter to a constructor only if it exist?

我有一个对象,它有一个带有可选参数的构造函数,如下所示:

class example{

   constructor(a: string,b: string,c: string,d?:string){
     //...
   }

}

此 class 将在另一个方法中实例化。像这样:

function createExample(a: string,b: string,c: string,d?:string){
  return new example(a,b,c,d)
}

但我只想在接收到函数 createExample() 时传递“d”参数。 javascript/typescript 有没有办法做到这一点。类似于:

我只想在参数 d 存在时传递它,我希望我不必执行 if 来检查它,因为如果我有更多可选参数,它会变得复杂。 javascript/typescript 有没有办法做到这一点。类似于:

function createExample(a: string,b: string,c: string,d?:string){
  return new example(a,b,c,d?)
}

或者我应该只用普通的“d”参数保留实例,如果它没有定义,它应该作为未定义的传递?

如果您将 D 的类型定义为可能未定义,您可以将其传入

class Example {
   constructor(a: string, b: string, c: string, d?: string) {
     // ...  
   }
}

const A = "";
const B = "";
const C = "";
let D: string | undefined;

if (someCondition) {
  D = "d";
}

const ex = new Example(A, B, C, D);

Or should I just leave the instatiaton with the normal "d" parameter, and in case it is not defined, it should be passed as undefined?

是的,正是这样。 JavaScript 将缺少的参数和作为参数传递的 undefined 视为相同的 1 - 两者都以 undefined 或默认参数结束。所以就这么简单

function createExample(a: string, b: string, c: string, d?: string) {
  return new Example(a, b, c, d);
}

如果您真的很在意,可以对数组使用扩展语法:

function createExample(...args: [a: string, b: string, c: string, d?: string]) {
  return new Example(...args);
}

1:除了arguments.length和其余参数语法