Я ожидал, что Closure Compiler будет предупреждать обо всех строках ниже, но только 3) появляется как проблема. Type Checking Array Contents with Closure-Compiler затрагивает эту же точку, но мой вопрос заключается в том, что с учетом этих ограничений какие выгоды реализованы из аннотаций Array<T>
vs Array
? Я чувствую, что это ложное чувство безопасности.С компилятором Closure Каковы преимущества массива <T> аннотации против простого массива?
// ==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/
Javascript не имеет ограничений по типу. Вы можете «var xs = true;» then «xs ++;» Если какой-либо другой интерпретатор имеет ограничение, у вас не будет безопасности ... однако, большинство систем сообщит вам, если вы делаете неожиданные операции. Насколько я могу судить, это единственное преимущество. – Bonatti