Не удалось получить доступ к функции после eval () - PullRequest
0 голосов
/ 31 марта 2020

По какой-то причине мне необходимо использовать eval () и получить доступ к функции, т.е. foo. Тем не менее, я не смог сделать это в машинописи.

eval("function foo() { console.log(\"foo bar\") }");
// @ts-ignore
foo();

В приведенном выше коде вместо ошибки выведите «foo bar» в журнале консоли.

VM42:4 Uncaught ReferenceError: foo is not defined

Вы можете попробовать код здесь .

Однако тот же код работает в javascript.

Требуется ли дополнительная настройка?

Ответы [ 2 ]

4 голосов
/ 31 марта 2020

Подразумеваемый "use strict" TypeScript накладывает жесткие ограничения на eval, в частности на его неспособность создавать новые символы . Вам необходимо явно вернуть и назначить функцию из eval:

"use strict"

const foo = eval("function foo() { console.log(\"foo bar\") }; foo;");

foo();
1 голос
/ 31 марта 2020

// Вы можете определить в окне / глобальном. это будет доступно везде.

// Вы можете hoist функция. Чит

let foo;
eval('function foo() { console.log("foo bar") };');

// @ts-ignore
foo();

// Для браузера добавить в окно,

eval("function foo() { console.log(\"foo bar\") }; window.foo = foo");

// @ts-ignore
foo();

// Для nodejs добавить в окно,

eval("function foo() { console.log(\"foo bar\") }; global.foo = foo");

// @ts-ignore
foo();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...