Size: a a a

2019 December 09

AP

Alexander Popov in JS for testing
Oleksii Ihnatiuk
Господа ребята. Хочу спросить вашего мнения.
У меня есть форма с 7 полями. 3 из них обязательны, а 4 нет. Для каждого поля мне нужно передать параметр. Вопрос: как вы жонглируете опциональными параметрами?
Вариант 1:
написать
method(
   station: string,
   amount: number,
   date?: string,
   drawType?: DrawType,
Плюс: когда будешь вводить параметры, то IDE подскажет какой параметр надо ввести и его тип.
Минус: если тебе надо последний, то прийдется ставить undefined предыдущим; в коде нужно писать if и проверку на undefined для каждого параметра.
Вариант 2:
Написать интерфейс для опциональных параметров и принимать в качестве аргумента один plain object
method(
   station: string,
   amount: number,
   optional: OptionalParameters
Плюс: передаешь только то что надо { date: '22-08-2019' }
Минус: IDE показывает лишь, что аргумент имеет тип OptionalParameters, что не очень удобно;  в коде нужно писать if и проверку на undefined для каждого параметра.
Ваш вариант?
method(options: { foo: number, bar: string, baz?: Date, kek?: {hvatit?: string, uze: number}}) {
if (options.baz?.kek) ...
...
}
источник

AP

Alexander Popov in JS for testing
обязательный объект  необязательными полями - передавай что надо в любом порядке
источник

OI

Oleksii Ihnatiuk in JS for testing
да, в таком виде IDE подсказывает, спасибо. Жаль что IDE не раскрывает интерфейс
источник

AP

Alexander Popov in JS for testing
что не каскрывает?
источник

ab

artem belikov in JS for testing
А так почему никто не делает)?
{
 "$schema": "http://json-schema.org/draft-07/schema#",      
   "type": "object",
   "required" : ["firstName"],
   "properties": {
      "firstName": {
         "type": "string",
         "description": "The person's first name."
      }
   },
   "additionalProperties": false  
}
источник

ab

artem belikov in JS for testing
Вместо if then else)?
источник

BO

Boris Osipov in JS for testing
чуть раскрой что ты имешь ввиду
источник

BO

Boris Osipov in JS for testing
Леша просто про вызов метода писал. не очень понятно при чем тут это
источник

ab

artem belikov in JS for testing
Ну есть json schema, зачем велосипедить контракт  если его можно описать "нормально"
источник

BO

Boris Osipov in JS for testing
ммм там речь про ui тесты шла. сложно понять как ты хочешь контракт описать таким образом...
источник

D

Denis in JS for testing
Привет, чат.

Кто-нибудь использовал недавно появившийся Taiko (https://taiko.gauge.org/) от небезызвестных ThoughtWorks? Представляет собой Puppeteer с человеческим лицом (синтаксис по типу кипариса и кодцепта, работает напрямую с хромовским DevTools Protocol).

Они даже сравнение с конкурентами запилили, причем, не очень ангажированное: https://gauge.org/2019/08/21/how-taiko-compares-to-other-browser-automation-tools/

Комьюнити очень маленькое, но вдруг кто-то уже трогал?
источник

MB

Michael Bodnarchuk in JS for testing
пока из поста сложно понять чем оно лучше - тот же кодсепт :)
источник

OI

Oleksii Ihnatiuk in JS for testing
Oleksii Ihnatiuk
Господа ребята. Хочу спросить вашего мнения.
У меня есть форма с 7 полями. 3 из них обязательны, а 4 нет. Для каждого поля мне нужно передать параметр. Вопрос: как вы жонглируете опциональными параметрами?
Вариант 1:
написать
method(
   station: string,
   amount: number,
   date?: string,
   drawType?: DrawType,
Плюс: когда будешь вводить параметры, то IDE подскажет какой параметр надо ввести и его тип.
Минус: если тебе надо последний, то прийдется ставить undefined предыдущим; в коде нужно писать if и проверку на undefined для каждого параметра.
Вариант 2:
Написать интерфейс для опциональных параметров и принимать в качестве аргумента один plain object
method(
   station: string,
   amount: number,
   optional: OptionalParameters
Плюс: передаешь только то что надо { date: '22-08-2019' }
Минус: IDE показывает лишь, что аргумент имеет тип OptionalParameters, что не очень удобно;  в коде нужно писать if и проверку на undefined для каждого параметра.
Ваш вариант?
источник

OI

Oleksii Ihnatiuk in JS for testing
в итоге остановился на варианте @aleksander_popov .
async purchase(
   station: string,
   amount: number,
   optional: {
     date?: string,
     printSummary?: number,
     note?: string,
     addNew?: false
   } = {}
источник

OI

Oleksii Ihnatiuk in JS for testing
плюс: видны типы в IDE
минус: субъективно мне больше нравится описывать интерфейс, а не лупашить все в параметры, но так IDE не показывает типы для аргрументов внутри интерфейса
источник

AP

Alexander Popov in JS for testing
Дак ты описал все типы
источник

OI

Oleksii Ihnatiuk in JS for testing
Подытожив, хочу сказать что я использую в разных случаях разный вариант. Но вот когда параметров становится много, то последний наверное лучше всего
источник

AP

Alexander Popov in JS for testing
Вон же они, все описаны
источник

AP

Alexander Popov in JS for testing
Нет интерфейса
источник

OI

Oleksii Ihnatiuk in JS for testing
нельзя переиспользовать, и смешивается все в кучу
источник