Хорошо, для некоторого контекста я пытаюсь использовать машинопись в устаревшем приложении. Этот устаревший код компилируется, и если его поместить в модуль, он больше не будет работать во время выполнения. По этой причине я считаю, что это мешает мне использовать импорт в этом рабочем файле, потому что я думаю, что как только вы поместите импорт, он обернет весь файл в модуль.
Я действительно изо всех сил пытаюсь обеспечить безопасность типов в моих глобальных переменных. Проблема в том, что область действия enum, по-видимому, существует только в файле, в котором она определена. Интерфейсы, с другой стороны, кажутся глобальными, хотя оба они определены в одном файле. У меня есть 3 файла: global.ts, тест и производственный код.
global.ts:
enum Activity {
...
}
interface TwineSetup {
performActivity: (
activity: Activity
) => void;
}
(global as any).setup = {};
(global as any).State = {
variables: {}
};
(global as any).Activity = Activity;
test.ts:
import "jasmine";
import "./prod.ts";
console.log("spec");
declare let State: TwineState;
...
it("", () => {
setup.performActivity(Activity.Converse); //eslint error here: error 'Activity' is not defined no-undef
});
prod.ts
declare let State: TwineState;
setup.performActivity = (
activity: Activity
): void => { //this signature cannot change or else it will not work at runtime
const { variables } = State;
switch (activity) {
case global.Activity.Converse: //eslint error here if i comment out the tests: error 'Activity' is not defined no-undef
...
}
};
У меня почти все получилось, но, как я уже сказал, я не могу найти способ для всех трех файлов увидеть перечисление Activity
. По причинам, которые я не понимаю, все 3 файла могут видеть интерфейсы, но перечисление работает по-разному. Он виден другим файлам, только если он определен внутри них. Как мне заставить все файлы видеть перечисление?
Я обнаружил проблему с github, говорящую именно об этом , но когда я последовал совету aluanhaddad , Я все еще получаю сообщения об ошибках:
ошибка 'Активность' не определена no-undef
Возможно, стоит отметить, что если я предвосхищу свое использование эти перечисления с global
, как и global.Activity.Converse
, код Visual Studio перестал жаловаться, но eslint все равно выдает эти ошибки, когда я его запускаю. Возможно, это неправильно, если это неправильно? Опять же, в проблеме github не упоминается, что мне нужно было предварять ее global.
Вот мой .eslintr c. js config:
module.exports = {
env: {
browser: true,
es6: true,
node: true,
jasmine: true,
},
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"plugin:testcafe/recommended"
],
globals: {
Atomics: "readonly",
SharedArrayBuffer: "readonly"
},
parser: "@typescript-eslint/parser",
parserOptions: {
ecmaVersion: 2018,
project: "./tsconfig.json",
},
plugins: ["@typescript-eslint", "testcafe"],
rules: {
quotes: ["error", "double"],
"no-plusplus": ["off"],
"@typescript-eslint/camelcase": ["off"]
}
};
И вот мой пакет. json:
{
...
"version": "1.0.0",
"main": ".webpack/main",
"scripts": {`
"lint": "eslint tsc/** --fix",
"test": "npm run lint && ts-node node_modules/jasmine/bin/jasmine && ..."
},
"keywords": [],
"devDependencies": {
"@types/jasmine": "^3.5.9",
"@types/node": "^13.9.1",
"@typescript-eslint/eslint-plugin": "^2.24.0",
"@typescript-eslint/parser": "^2.24.0",
"eslint": "^6.8.0",
"eslint-plugin-testcafe": "^0.2.1",
"jasmine": "^3.5.0",
"testcafe": "^1.8.2",
"ts-node": "^8.6.2",
"typescript": "^3.7.0"
},
"dependencies": {}
}