React Native: показывать ошибки времени выполнения при компиляции (Typescript) - PullRequest
5 голосов
/ 07 мая 2020

Я использую TypeScript в моем проекте react-native, и он отлично работает. Единственная проблема, с которой я столкнулся, заключается в том, что среда IDE показывает мне ошибки и все такое. Но я все еще могу запустить свой проект, даже если есть ошибки машинописного текста. Например, если у меня есть машинописная ошибка, например

 type something = 'abc'
const fn(arg: something){ }
fn('somethingelse')

, IDE покажет, что somethingelse не назначено abc. Но когда я перезагружаю приложение / пакет. Он все еще компилируется. Я добавил некоторые из моих файлов конфигурации машинописного текста

tsconfig.json

{
  "compilerOptions": {
    "baseUrl": "app",
    "target": "es2018",
    "lib": ["dom", "dom.iterable", "esnext"],
    "jsx": "preserve",
    "allowJs": true,
    "allowSyntheticDefaultImports": true,
    "allowUnreachableCode": false,
    "declaration": false,
    "downlevelIteration": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true,
    "importHelpers": false,
    "isolatedModules": true,
    "noFallthroughCasesInSwitch": true,
    "noImplicitAny": true,
    "noImplicitReturns": true,
    "noImplicitThis": true,
    "noLib": false,
    "noUnusedParameters": true,
    "noUnusedLocals": true,
    "pretty": true,
    "resolveJsonModule": true,
    "skipLibCheck": true,
    "removeComments": true,
    "sourceMap": true,
    "strict": true,
    "suppressImplicitAnyIndexErrors": true,
    "module": "esnext",
    "moduleResolution": "node",
    "noEmit": true
  },
  "typeAcquisition": {
    "include": ["jest"]
  },
  "include": ["app/**/*", "test-utils"]
}

И когда я также делаю yarn tsc, я получаю эту ошибку

TypeError: Cannot read property 'kind' of undefined Хотя ts c --w работает, но мне нужны эти ошибки во время выполнения, чтобы я мог исправлять их всякий раз, когда они возникают. Сейчас я вижу эти ошибки только в IDE. но он все равно компилируется.

1 Ответ

3 голосов
/ 15 мая 2020

1) Первое, что нужно понять, это то, что Typescript - это надмножество Javascript, и в этом случае он фактически не проверяется на тип во время компиляции.

2) По сути, происходит следующее: Babel просто удаляет Typescript и преобразует его в Javascript, который затем компилируется в пакеты js. Вы можете взглянуть на первую строку следующих документов Babel, а также на предостережения: link

3) Поскольку Babel не проверяет типы, код является синтаксически правильным, но приведет к сбою проверки типов TypeScript, может быть успешно преобразовано, и часто неожиданным или недопустимым образом. 1010 * установлено значение true в вашем tsconfig.

Обновление: Я обнаружил еще один экземпляр, где это применяется недавно при добавлении jest и typescript в проект. Внизу документации Jest на самом деле указано одно и то же: ссылка

Однако есть некоторые предостережения по использованию TypeScript с Babel. Поскольку поддержка TypeScript в Babel является транспиляцией, Jest не будет проверять типы ваших тестов при их запуске. Если вы этого хотите, вы можете использовать ts-jest.

...