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

Поддерживается ли статическая типизация в ECMAScript 6 или 7?

Есть ли поддержка для статического ввода в ECMAScript 6? Как насчет ECMAScript 7?

4b9b3361

Ответ 1

Нет.

Но в ECMA-w370 > Wikipage есть абзац об изменениях в ECMA- Script 7:

Седьмое издание находится на очень ранней стадии разработки, но предназначено для продолжения тем языковой реформы, изоляции кода, контроля эффектов и возможности создания библиотеки/инструмента с ES6. Предлагаемые новые функции включают promises/concurrency, числовые и математические улучшения, защитные и товарные знаки (альтернатива статической типизации), перегрузка операторов, типы значений (первоклассные числовые объекты) новые структуры записей (записи, кортежи и типизированные массивы), сопоставление образцов и черты.

Это может вас заинтересовать.

Ответ 2

Хотя это не входит в спецификацию ES6, Closure Compiler применяет аннотации типа аргументов JSDoc в JavaScript-коде при использовании его расширенного уровня компиляции. Аннотации типа указываются с использованием комментариев, поэтому они игнорируются в процессе разработки, но когда вы создаете приложение для выпуска продукции, несоответствие типа приведет к предупреждению компилятора или, необязательно, к ошибке компилятора.

Пример принудительной аннотации типа JSDoc:

/**
 * @param {string} stringValue
 * @return {number}
 */
function toInt(stringValue) {
  return parseInt(stringValue, 10);
}

var val = toInt("10"); // Good
var val = toInt(false); // NaN in development, but throws an error (optional) 
                        // or prints a warning (default) at build time

В качестве дополнительного бонуса JSDoc может создавать документацию API с использованием этого же синтаксиса. Это также удобно, если вы документируете свой код.

Но предупреждение: для Closure Compiler для выполнения своей расширенной магии оптимизации каждый инженер вашего проекта должен следовать определенным строгим правилам кодирования. Компилятор не может применять типы, если он не может достоверно определить, что делает ваш код, а это означает отказ от динамического и легкомысленного синтаксиса JavaScript. Если вы не будете следовать им, ошибки могут закрасться в ваше приложение, и их можно будет очень трудно диагностировать после этого факта. Большинство популярных фреймворков и библиотек JavaScript не следуют им, хотя иногда вы можете обойти это с помощью функции externs компилятора. (Например, jQuery поддерживается с использованием externs.)

Итак, если вы его используете, убедитесь, что вы тщательно протестировали приложение. Я лично даже не подумал бы об использовании этой функции в веб-приложении, если у нее нет бот-сервера Jenkins и почти 100% -ного автоматического тестирования, которое может быть выполнено против вашего кода после его оптимизации. Это много работы и не для всех; мне потребовались месяцы, чтобы получить один из моих проектов до этого уровня. Но лично я считаю, что это стоит того.

Для получения дополнительной информации ознакомьтесь с Расширенной компиляцией и внешними версиями и Аннотирование JavaScript для компилятора Closure.

Ответ 3

Нет, нет поддержки для статического ввода текста в ECMAScript 6.

Что касается ECMAScript 7, то на каком-либо из вариантов 1, 2, 3, 4 или этап 0 для статического ввода.

Я видел несколько предложений/идей для статического ввода текста в списке рассылки es-discuss, но ни один из них на самом деле не был предлагается для ES7. Вероятно, я бы сказал, что ES8 является самым ранним предложением, которое может возникнуть.

Если вы хотите установить статическую печать прямо сейчас, вы, вероятно, лучше всего смотрите в TypeScript или поток.

Ответ 4

Хотя это не чистый ES6, Google AtScript расширяет ES6 с аннотациями типов и компилируется в действительный код ES6 после того, как компилятор становится общедоступным: AtScript primer

Ответ 5

В качестве опции вы можете посмотреть плагин EsLint https://github.com/yarax/typelint

Это не статическая проверка, но необязательная. Преимущество TypeLint заключается в использовании уже существующих данных приложения для автоматического создания и использования типов, в отличие, например, от TypeScript или потока, где вы должны сами описывать сложные типы.