У меня проблема, когда компилятор TypScript успешно компилирует мой код, но среда выполнения дает мне неопределенные ошибки типа.
В моем приложении я создал файл types.ts
с некоторыми вещами, разделяемыми между несколькими другими ts файлами. Он содержит перечисление строк, например:
enum MyEnum {
One = "one";
Two = "two";
}
Когда я это определяю. Компилятор позволяет мне использовать его в других ts файлах и, кажется, счастлив. Однако во время выполнения я получаю сообщение об ошибке "MyEnum не определен".
Я знаю два способа решить это:
- Определите перечисление в файле, где он используется. Но я не думаю, что это решит что-нибудь для других файлов, которые хотят его использовать.
- Используйте "export" в файле types.ts и импортируйте каждый тип явно везде, где он используется.
Я совершенно новичок в машинописном машиностроении, и я чувствую, что могу быть недопониманием чего-то фундаментального.
Во-первых, я не понимаю, почему компилятор TypScript с радостью компилирует мой код, если будет ошибка времени выполнения. Я бы понял это, если бы я использовал ключевое слово declare
, сообщив компилятору, что что-то должно быть доступно во время выполнения, но в этом случае я не понимаю, почему он должен предположить, что перечисление происходит из где-либо еще, а затем файла types.ts.
Во-вторых, я хотел бы определять типы где-то глобально в моем приложении и иметь их везде, без необходимости импортировать их каждый раз, когда я их использую. Как это сделать? Или это может считаться плохой практикой?
Я использую TypScript 2.6, и моя конфигурация выглядит так:
{
"compilerOptions": {
/* Basic Options */
"target": "es6",
"module": "commonjs",
"lib": ["es6", "es7", "esnext"],
"sourceMap": true /* Generates corresponding '.map' file. */,
"outDir": "build" /* Redirect output structure to the directory. */,
"removeComments": true /* Do not emit comments to output. */,
/* Strict Type-Checking Options */
"strict": true /* Enable all strict type-checking options. */,
/* Additional Checks */
"noUnusedLocals": true /* Report errors on unused locals. */,
"noUnusedParameters": true /* Report errors on unused parameters. */,
"noImplicitReturns": true /* Report error when not all code paths in function return a value. */,
"noFallthroughCasesInSwitch": true /* Report errors for fallthrough cases in switch statement. */,
"plugins": [{ "name": "tslint-language-service" }],
"skipLibCheck": true // because firebase-sdk has wrong type files now (Nov 18)
},
"include": ["src/**/*"],
"exclude": ["build"]
}