Typescript: Как я могу разделить типы enum между файлами без использования импорта? - PullRequest
0 голосов
/ 21 марта 2020

Хорошо, для некоторого контекста я пытаюсь использовать машинопись в устаревшем приложении. Этот устаревший код компилируется, и если его поместить в модуль, он больше не будет работать во время выполнения. По этой причине я считаю, что это мешает мне использовать импорт в этом рабочем файле, потому что я думаю, что как только вы поместите импорт, он обернет весь файл в модуль.

Я действительно изо всех сил пытаюсь обеспечить безопасность типов в моих глобальных переменных. Проблема в том, что область действия 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": {}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...