Здравствуйте, Serginio1, Вы писали:
V>>Он еще чуть больше TS чем сам TS. ))
S> Например? Мне интересно.
Ну я-то небольшой специалист по обоим, много на них не писал, просто пару раз пробовал из любопытства.
Впечатление такое, что TS — это чуть продвинутый JS, а Dart — это чуть продвинутый TS.
V>>Плюс еще немножко удобств и синтаксического сахара.
S>MS сделал TS таким каким его хотел Гугл для Angular 2. Именно по этому он и основной.
Разработчик C# единолично сделал пруф типизированного JS, затем подключилось коммьюнити и "одобрило".
В этом месте Гуглу ничего не оставалось делать, если коммьюнити одобряэ.
Гугл попросил добавить еще фич в TS для совместимости по возможностям с Dart (MS включила фичи из гуглового AtScript в TS).
Вот теперь всё сошлось, в итоге у Гугла появился конвертер из TS в Dart:
https://github.com/angular/ts2dart
S> А можно поподробнее на счет сахара. То, что я видел ничего нового от TS не увидел.
Что касается синтаксиса, то да, в ES6 тоже уже много чего есть от обоих.
Но дело не в этом.
Dart более строгий язык, более интересный, как по мне.
Под такие языки от IDE больше пользы.
Язык с нормальной системой модулей, а не эмулируемой, как в JS, когда для эмуляции модульности иcпользуется динамический eval.
Нормальная модульность позволила сделать для Dart мощную стандартную библиотеку — а это самое первое для любого языка.
В этом смысле в JS всё очень и очень печально...
Однако, на нашей памяти было уже столько раз повторений одной и той же истории, когда выигрывала не лучшая технология, а худшая, но оказавшаяся в нужное время в нужном месте...
Посмотрим.
Ведь не исключается возможность дальнейшего развития TS, вплоть до нормального компиллируемого кода, как Dart, C# или Джава.
Так же не исключается появление сугубо TS-библиотек, а не только их оберток над имеющимися JS.
Как раз Angular-2 как пример.
Тут разработчик Шарпа поступил хитро — дал людям эдакий "мостик" м/у хаосом скриптового мира и мира, основанного на контрактах. Почему "мостик" — код JS одновременно является валидным TS-кодом, в этом суть трюка.
Точно так же когда-то С++ взлетел поверх уже ставшего стандартом де-факто С.
На эту тему есть интересная статья:
https://habrahabr.ru/company/wrike/blog/323550/
А вот для Dart-а всё это не так. На Dart надо как бы "перепрыгивать", а не плавно переходить, повторно используя уже имеющиеся наработки "as is". Вот принципиальное отличие, ИМХО.
Да, эти наработки для Dart можно портировать автоматически. Но, как показывает практика, всегда лучше сделать их с 0-ля на "нормальном" языке. Плюс сама необходимость портирования — это тоже психологический барьер.
S> в TS те же async await, гибридные типы, очень близок к C#. Даже в C# не ввели рекорды, а в TS аналог записи есть через конструктор, появился Deconstruct.
S> Так, что по сахару и TS и C# идут в одном направлении
А интерполяция строк в TS изкаробки есть?
(e, stackTrace) => print('Oh noes! $e $stackTrace'))
В C# 6.0 тоже есть.
И вообще, Dart имеет мейнстримовый сишный синтаксис:
class User {
num id;
string name;
User(this.id, this.name);
string getInfo() {
return "id: $id name: $name";
}
}
var tom = new User(1, "Tom");
Этот же пример на TS:
class User {
id: number;
name: string;
constructor(userId: number, userName: string) {
this.id = userId;
this.name = userName;
}
getInfo(): string {
return "id:" + this.id + " name:" + this.name;
}
}
let tom: User = new User(1, "Tom");
Комментарии излишни, как по мне.
На Dart может писать сходу человек с бэкграундом C/C++/C#/Java.
Всё будет ложится гладко чисто на уровне рефлексов.
На другой стороне идут сторонники ключевого слова function и аннотаций типов через ':', типа TS/Swift/Nemerle
S> Кстати интересная статья История о том, как мы перевели проект в почти четверть миллиона строк на TypeScript и остались в живых
Дык, в этом и суть, пока JS будет являться валидным TS.
Можно переводить пошагово, с вменяемым объемом изменений на каждом шаге.