Я ожидал, что Closure Compiler выдаст предупреждение обо всех строках ниже, но только 3) отображается как проблема. Проверка содержимого массива с помощью Closure-Compiler затрагивает ту же самую точку, но мой вопрос: учитывая эти ограничения, какие преимущества дает аннотирование Array<T>
по сравнению с Array
? Я чувствую, что это ложное чувство безопасности.
// ==ClosureCompiler==
// @compilation_level SIMPLE_OPTIMIZATIONS
// @output_file_name default.js
// @warning_level VERBOSE
// ==/ClosureCompiler==
/** @type {!Array<!string>} */
var xs = [];
xs.push(42); // 1) no warning
xs.push(null); // 2) no warning
xs = 'foo' // 3) warns - found: string, required: Array<string>
xs = [1,2,3]; // 4) no warning
Быстрое редактирование: вы можете поэкспериментировать с этим кодом на странице http://closure-compiler.appspot.com/
var xs = true;
затемxs++;
Если какой-либо другой интерпретатор не имеет ограничения, у вас не будет защиты.... однако большинство систем сообщит вам, если вы выполните неожиданные операции. Насколько я могу судить, это единственный плюс. - person Bonatti   schedule 28.10.2015