Подтвердить что ты не робот

Является ли каждая программа JavaScript также программой TypeScript?

Typescript Спецификация языка говорит:

Каждая программа JavaScript также является программой TypeScript

Теперь рассмотрим этот код:

var i = 5;
i = "five";

Это абсолютно корректный javascript, который будет выполняться без ошибок. Он НЕ является допустимым TypeScript, и он не скомпилируется.

В моем понимании приведенного выше высказывания и примера кода явно несовместимо.

Не могли бы вы пояснить, что делает утверждение spec истинным в контексте приведенного выше примера.

Обновление

Чтобы обратиться к аргументу о том, что оператор не отражает действительности программы, перефразируйте его следующим образом:

Каждая программа JavaScript также является допустимой или недействительной программой TypeScript

или

Каждая программа JavaScript не обязательно является действительной программой TypeScript

Если авторы хотели сказать последнее, почему они не сказали это?

4b9b3361

Ответ 1

Похоже, вопрос задается так, как будто утверждение выглядит следующим образом:

Каждая программа JavaScript также является семантически корректной программой TypeScript

Это утверждение будет ложным, но это не то, что здесь сказано.

Если вы попытаетесь скомпилировать этот синтаксически правильный код TypeScript...

var i = 5;
i = "five";

... вы получите ошибку компиляции, потому что она не семантически корректна, она присваивает строку переменной, неявно напечатанной как число. Однако, поскольку он синтаксически корректен, компилятор все равно будет выводить в файл .js с тем же кодом выше в дополнение к металированию ошибки компиляции.

Итак, каждая программа JavaScript также является программой TypeScript? Да, но это не значит, что вы не получите ошибок компиляции.

Sidenote: вы можете запретить компилятору испускать ошибку при указании --noEmitOnError при компиляции.


Адресация обновлений

То, что они могли бы сделать, расширилось на это, указав, что:

Каждая синтаксически корректная программа JavaScript также является синтаксически правильной программой TypeScript.

Однако, когда вы смотрите на цитату в ее контексте, вы можете видеть, что основная идея, представленная в начале абзаца, уже о синтаксисе:

TypeScript - синтаксический сахар для JavaScript. Синтаксис TypeScript - это надмножество синтаксиса Ecmascript 5 (ES5). Каждая программа JavaScript также является программой TypeScript.

Итак, возможно, автор думал, что "синтаксически правильная" была бы повторяющейся.

Ответ 2

Фраза должна быть рассчитана на уровне синтаксиса. Код

var i = 5;
i = "five";

действителен TypeScript синтаксис, но будет генерировать ошибку скомпилировать из-за дополнительных проверок, выполняемых TypeScript.

В основном эта часть говорит, что TypeScript является расширением, а не редизайном синтаксиса Javascript (если это хорошо или не зависит от ваших взглядов).

Ответ 3

Да, это действительно верно TypeScript. Если бы это был код в приложении TypeScript, он все равно создавал бы для вас файл JavaScript. Вы можете удалить предупреждение с помощью:

var i: string|number = 5;
i = "five";

Конечно, поскольку у вас есть информация о типе, которая висит вокруг, TypeScript может предупредить вас о возможных ошибках. В свою очередь, вы можете улучшить информацию о типе, которую он использует, как я уже говорил, чтобы объяснить, как вы собираетесь использовать переменную.

Теперь у нас есть приложение, которое позволяет использовать исходный код, где i - строка или число, но предотвратит последующую аварию, когда кто-то пытается назначить что-то еще.