Есть ли способ в typescript передать необязательный параметр конструктору, только если он существует?

У меня есть объект, у которого есть конструктор с необязательным параметром, например:

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», а в случае, если он не определен, его следует передать как неопределенный?

Откуда вы берете аргумент D? Что вы подразумеваете под "если он существует"? Чего именно не существует - и почему бы вам не знать, существует ли оно?

Bergi 18.03.2022 03:00

Предоставьте минимальный воспроизводимый пример, который четко демонстрирует проблему, с которой вы столкнулись. В идеале кто-то может вставить код в автономную IDE, такую ​​как Площадка TypeScript (ссылка здесь!), и сразу же приступить к решению проблемы, не создавая ее заново. Таким образом, не должно быть псевдокода, опечаток, несвязанных ошибок или необъявленных типов или значений.

jcalz 18.03.2022 03:07

Вы правы, я не очень хорошо объяснил. Позвольте мне отредактировать вопрос, чтобы сделать его более ясным

Jorge Cróquer 18.03.2022 14:12
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
30
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если вы определяете тип для 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

Другие вопросы по теме