Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Не все браузеры поддерживают отладку TypeScript в консоли без лишних настроек.Действительно ли это доставляет проблем? Говорят, что сгенеренный JS обычно настолько прост, что вообще не составляет проблем его дебажить без всяких сорсмапов. Правда или врут? Если правда, то минус сугубо теоретический.
Множество нетривиальных классов. Чтобы писать код, опираясь на классы, приходится держать в голове какое свойство где находится. Например вместо одного класса Event существуют еще такие как MouseEvent, TouchEvent, KeyboardEvent и другие…Это ж браузерные классы, а не тайпскриптовые. Или я чего-то не понял в этом минусе, или вы что-то не то говорите.
Неявная статическая типизация. Всегда можно описать тип как any, что по факту отключит приведение к конкретному типу этой переменной.Опять же. Насколько это реальная практическая проблема? Действительно ли всякие ленивые люди это делают, и это доставляет какую-то боль?
d.ts декларации поддерживаются сообществом DefinitelyTyped и часто не соответствуют текущей версии библиотеки. Либо не учитывают сложных вариантов (generic-функции, возвращаемые значения нескольких типов)И опять же хотелось бы примеров — насколько часто такое встречается, и насколько много проблем доставляет.
Говорят, что сгенеренный JS обычно настолько прост, что вообще не составляет проблем его дебажить без всяких сорсмапов.Правда. У меня ни разу не было желания как-то настраивать браузер, чтобы можно было дебажить именно .ts код. .js генерятся очень понятные. Вот если бы можно было дебажить TS прямо в студии — это было бы действительно классно, но я такой возможности не нашёл.
Насколько это реальная практическая проблема?На мой взгляд это не проблема при минимальном уровне дисциплины в команде. Хотя, конечно, если использовать any везде, то будет боль. Но записывать это в минусы языка я бы не стал. dynamic же в минус шарпу не ставят.
d.ts декларации поддерживаются сообществом DefinitelyTyped и часто не соответствуют текущей версии библиотеки.Если критично использовать последние версии или редкие библиотеки — то возможно будут проблемы с d.ts. Но никто не мешает работать с JS файлами через any или написать свой файл определений.
Либо не учитывают сложных вариантов (generic-функции, возвращаемые значения нескольких типов)У меня за полтора годы работы такое было один раз. Пришлось повозиться, но большой проблемы я не вижу.
Не все браузеры поддерживают отладку TypeScript в консоли без лишних настроек.
Действительно ли это доставляет проблем? Говорят, что сгенеренный JS обычно настолько прост, что вообще не составляет проблем его дебажить без всяких сорсмапов. Правда или врут? Если правда, то минус сугубо теоретический.
Множество нетривиальных классов. Чтобы писать код, опираясь на классы, приходится держать в голове какое свойство где находится. Например вместо одного класса Event существуют еще такие как MouseEvent, TouchEvent, KeyboardEvent и другие…
Это ж браузерные классы, а не тайпскриптовые. Или я чего-то не понял в этом минусе, или вы что-то не то говорите.
Неявная статическая типизация. Всегда можно описать тип как any, что по факту отключит приведение к конкретному типу этой переменной.
Опять же. Насколько это реальная практическая проблема? Действительно ли всякие ленивые люди это делают, и это доставляет какую-то боль?
d.ts декларации поддерживаются сообществом DefinitelyTyped и часто не соответствуют текущей версии библиотеки. Либо не учитывают сложных вариантов (generic-функции, возвращаемые значения нескольких типов)
И опять же хотелось бы примеров — насколько часто такое встречается, и насколько много проблем доставляет.
Лично сталкивался со случаем вида (event).keyCode, где keyCode нет в классе Event.Я ж говорю, это исключительно браузерные классы. Откройте любую консоль и поиграйтесь как я.


Неявная статическая типизация. Всегда можно описать тип как any, что по факту отключит приведение к конкретному типу этой переменной.
За это время мы привыкли друг к другу и пережили много успехов и разочарований.
В процессе разработки имеем дело с файлами *.ts, *.d.ts, *.map, *.js. Слишком много дополнительных файлов, что бывает неудобно, если ваш проект небольшой.Два последних известным всем тем, кто хоть немного сталкивался с front-end'ом. Первый, это собственно сам код (к слову, *.js -> *.ts ничего не сломает, но, думаю, вы об этом и так знаете)
Не все браузеры поддерживают отладку TypeScript в консоли без лишних настроек.Если высказали проблему, то может как-то расширить её — с чем столкнулись, как решали? Я, например, к сожалению, не сталкивался и было бы очень интересно прочитать про опыт других.
Множество нетривиальных классов. Чтобы писать код, опираясь на классы, приходится держать в голове какое свойство где находится. Например вместо одного класса Event существуют еще такие как MouseEvent, TouchEvent, KeyboardEvent и другие...Частично соглашусь, но с оговоркой, что вы только начали работать с языком. Впоследствии это как-то не замечается, возможно только у меня.
Неявная статическая типизация. Всегда можно описать тип как any, что по факту отключит приведение к конкретному типу этой переменной.Не соглашусь. Это скорее feature самого языка. Кроме того, проблему всегда можно решить. Можно, например, начать с этого.
Это транспайлер, что подразумевает, что мы должны всегда иметь под рукой tscЕсли вспомнить, что мы работаем с языком, который нужно ещё компилировать — проблема как-то угасает. Дотнетчики не жалуются, что им нужен csc.exe :) Ну и не стоит забывать про то, что сейчас всё чаще и чаще всё собирается, компилируется с использованием grunt, gulp или webpack
d.ts декларации поддерживаются сообществом DefinitelyTyped и часто не соответствуют текущей версии библиотеки. Либо не учитывают сложных вариантов (generic-функции, возвращаемые значения нескольких типов)В этом и есть весь challenge — вы можете стать частью огромного сообщества, которое изменяет мир open source. Исправили/добавили что-то — в следующий раз кто-то поможет и вам.
это одно из достоинств языка и проверка типов переоценена.
var myArray : Array<MyClass>;


А JS скажет?
А мне вот не кажется, что это маленькое преимущество.
Хочешь укрепляй, а хочешь брось так.
Добавить JS файлы в gitignore?
jsdoc по вполне понятным причинам не работает
Как импортировать другой файл TypeScript,
import com.packagename.MySecondClass;
...
var m2c : MySecondClass = new MySecondClass();
2. Приватные переменные только проверя..
public var myPublic : Int = 0;
private var myPrivate : Int = 0;
public static var myStaticPublic : Int = 0;
private static var myStaticPrivate : Int = 0;
1. Как импортировать другой файл TypeScript, что бы он вкомпиливался в результирующий файл?
tsc --out D:\ts\output.js D:\ts\app.ts D:\ts\hello.ts
2. Приватные переменные только проверяются на стадии компиляции — но на самом деле они публичные и если предок и наследник имеют приватную переменную с одним и тем же именем — будет просто ошибка компиляции. Это как то не продумано.
Это вызвано тем, что в JavaScript невозможно задать приватные поля. Они просто не предусмотрены спецификацией языка.Это смотря, что вы понимаете под «приватными полями». Переменные из scope функции-конструктора, доступные через замыкание, вам не подходят?
Мысли вслух о TypeScript