Формальные аргументы динамически создаваемой функции в Typescript - PullRequest
0 голосов
/ 08 октября 2018

В Javascript вы можете динамически создавать функцию, например:

const func = new Function(['arg'], 'console.log(arg)');

, чтобы ее можно было вызывать с заданными аргументами: func('Hello').Однако в Typescript конструктор Function, похоже, принимает только один аргумент - тело функции.Есть ли способ предоставить формальные аргументы для динамически генерируемой функции?

(Примечание по безопасности: код поступает из надежного источника, и то, что он может содержать, проверено как очень ограниченное).

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Конструктор Function принимает переменное количество строк точно так же, как состояния определения машинописного текста, причем последним является тело функции:

new Function ([arg1[, arg2[, ...argN]],] functionBody)

Это соответствует документам * 1006.*

Реализации браузера, вероятно, более разрешительны, но машинописный текст соответствует спецификации.

Самое простое решение - вызвать функцию по назначению:

const func = new Function('arg', 'console.log(arg)');

Или, если у вас уже есть массив аргументов:

const func = new Function(...['arg'].concat('console.log(arg)'));
0 голосов
/ 08 октября 2018

Вместо того, чтобы использовать конструктор Function для создания новой функции, просто назначьте функцию переменной следующим образом:

const func = function(arg) {
    console.log(arg);
}

Назначение функции таким способом называется выражением функции и широко используется вJavaScript.Назначив его таким образом, вы можете добавить столько аргументов, сколько потребуется.

const func = function(arg1, arg2, arg3) {
    console.log(arg1);
    console.log(arg2);
    console.log(arg3);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...