У меня есть объект, у которого есть конструктор с необязательным параметром, например:
class example{
constructor(a: string,b: string,c: string,d?:string){
//...
}
}
Этот класс будет создан внутри другого метода. Как это:
function createExample(a: string,b: string,c: string,d?:string){
return new example(a,b,c,d)
}
Но я хочу передать параметр "d" только в том случае, если функция createExample() получена. Есть ли способ сделать это в javascript/typescript. Что-то вроде:
Я хочу передать параметр d только в том случае, если он существует, и я надеюсь, что мне не нужно делать это, если это проверяет, потому что если у меня есть больше необязательных параметров, это может усложниться. Есть ли способ сделать это в javascript/typescript. Что-то вроде:
function createExample(a: string,b: string,c: string,d?:string){
return new example(a,b,c,d?)
}
Или я должен просто оставить установку с обычным параметром «d», а в случае, если он не определен, его следует передать как неопределенный?
Предоставьте минимальный воспроизводимый пример, который четко демонстрирует проблему, с которой вы столкнулись. В идеале кто-то может вставить код в автономную IDE, такую как Площадка TypeScript (ссылка здесь!), и сразу же приступить к решению проблемы, не создавая ее заново. Таким образом, не должно быть псевдокода, опечаток, несвязанных ошибок или необъявленных типов или значений.
Вы правы, я не очень хорошо объяснил. Позвольте мне отредактировать вопрос, чтобы сделать его более ясным
Если вы определяете тип для 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: except for arguments.length
and rest parameter syntax
Откуда вы берете аргумент
D
? Что вы подразумеваете под "если он существует"? Чего именно не существует - и почему бы вам не знать, существует ли оно?