Указание функции, которая принимает объект 'options' со значениями по умолчанию - PullRequest
0 голосов
/ 27 февраля 2020

Я хотел бы реализовать функцию, которая принимает объект options со значениями по умолчанию.

Я знаю, как это сделать, но я хочу навязать, что любое поле, не указанное пользователем, получит значение по умолчанию указано в заголовке функции.

Вот что у меня есть:

function func(options: {x: number; y: string;} = {x: 1, y: "1"}) {
    const x: number = options.x != undefined ? options.x : 1;
    const y: string = options.y != undefined ? options.y : "1";
    console.log(x, y);
}

Это прекрасно работает, когда я тестирую эту функцию на выходном файле Javascript:

func();
func({});
func({x: 0});
func({y: "2"});
func({x: 3, y: "4"});

Что приводит к:

1 '1'
1 '1'
0 '1'
1 '2'
3 '4'

Тем не менее, это выглядит немного странно (в частности, тот факт, что мне нужно указать каждое из значений по умолчанию в двух разных местах).

Есть ли известный шаблон проектирования для этого в Typescript?

Ответы [ 2 ]

2 голосов
/ 27 февраля 2020

Нет необходимости иметь значения по умолчанию в двух местах, вы можете сократить их так:

function func({ x = 1, y = "1" }: { x?: number; y?: string; } = {}) {
    console.log(x, y);
}

func();
func({});
func({ x: 0 });
func({ y: "2" });
func({ x: 3, y: "4" });

Или даже короче, если вам не нужен явный тип:

function func({ x = 1, y = "1" } = {}) {
    console.log(x, y);
}

Результаты:

1 '1'
1 '1'
0 '1'
1 '2'
3 '4'
1 голос
/ 27 февраля 2020
const defaults = {
   x: 1, 
   y: "1"
}

function func(options = defaults) {
    const x: number = options.x != undefined ? options.x : 1;
    const y: string = options.y != undefined ? options.y : "1";
    console.log(x, y);
}

Это выполнит sh то, что вы хотите.

Еще более компактно:

function func(options = { x: 1, y: "1" }) {
    const x: number = options.x != undefined ? options.x : 1;
    const y: string = options.y != undefined ? options.y : "1";
    console.log(x, y);
}

Компактность:

function func({x,y} = { x: 1, y: "1" }) {
   const _x = x ? x : 1;
   const _y = y ? y : "1";
   console.log(_x, _y);
}

Типы выводятся TypeScript из предоставленных значений по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...