Достаточно ли надежна машинопись?
Каждый в наши дни заставляет машинопись. Об этом так много поклонников и статей. Команда Angular делает свои рамки в TS. Но мой опыт перехода с ES6 на TS был очень разочаровывающим.
Я пытался перенести нашу относительно свежую кодовую базу (написанную на ES6) в Typescript в прошлом месяце и столкнулся с кучей ловушек!
Чтобы было ясно, мы говорим о приложении node.js с модульными тестами mocha и настроенным ESLint (используя babel для транспорта).
Прежде всего, для расширения возможностей проверки типов я настроил noImplicitAny
вариант, получил сотни ошибок и исправил их. Но после этого я получил ошибки при печати из-за машинописи не понимает некоторые предопределенные модули node.js, такие как stream
(Проблема на самом деле больше, из-за отсутствия набора для многих модулей).
После этого я установил typings
- рекомендуемая замена для tsd
инструмент для управления библиотекой d.ts
файлы, но это node
вводя определение, одновременно решая stream
проблема, добавлено много ошибок, потому что он дублирует некоторые предопределенные типы.
Кроме того, я обнаружил, что на самом деле машинопись не компилирует многие функции ES6 в ES5, например, генераторы. Это заставило меня сделать сложный процесс сборки (TS -> (машинопись) ES6 -> (babel) ES5), а это значит, что мне пришлось потратить впустую мои исходные карты.
Все вышеперечисленное заняло много времени для настройки.
Итак, я в замешательстве. Мне очень нравится идея машинописи, но реализация кажется мне грубой. Надеюсь я ошибаюсь.
Может быть, кто-то, кто использовал Typescript в реальном проекте, а не HelloWorld, мог бы объяснить мне, что я делаю неправильно?
1 ответ
Я настроил
noImplicitAny
вариант
У вас очень большие ожидания. Для более удобного переноса проекта из ES6, просто не используйте эту опцию.
Я получил ошибки при печати из-за машинописи не понимает некоторые предопределенные модули node.js, такие как
stream
,
Библиотеки JS, у которых нет определений типов, являются болью. Но неявный тип any
спасет тебя.
После этого я установил типизацию […], добавил много ошибок, потому что он дублирует некоторые предопределенные типы.
Исключить каталог браузера и browser.d.ts
от твоего tsconfig.json
,
Кроме того, я обнаружил, что машинопись не компилирует многие функции ES6 в ES5, например, генераторы. Это заставляет меня делать сложный процесс сборки (TS -> (машинопись) ES6 -> (babel) ES5), и это означает, что мне приходится тратить впустую мои исходные карты.
Выбор дизайна делает TS действительно надежным: скомпилированному коду не требуется библиотека времени выполнения.
Но почему вы используете Babel в своем сгенерированном коде ES6? С Node.js 4 или 5 ваш код ES6 будет работать нормально.
Достаточно ли надежна машинопись?
Столько, сколько JavaScript VM.
TypeScript с целевымES6 на Node.js
Начиная с TS 1.7, вариант--module
может использоваться в связи с цельюes6
, Пример, в tsconfig.json
:
"compilerOptions": {
"module": "commonjs",
"target": "es6",
}
Примечание: начиная с TS 1.8, модули излучаются с"use strict";
пролог