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

Почему компилятор Closure переименовывает свойства внешнего типа?

Я помещаю это в файл externs:

/** @typedef {{english: string, spanish: string}} */
var SpanishNoun;

Затем у меня есть javascript:

/**
 * @param {SpanishNoun} n 
 */
exp1.processData3 = function (n) {
    console.log("pd3:", n.english, n.spanish, n['english'], n['spanish']);
}

Что компилируется:

function(a){console.log("pd3:",a.a,a.c,a.english,a.spanish)};

Итак, он по-прежнему переименован в "английский" на "а" и т.д. Как вы это прекратите? Почему он думает, что может переименовать что-то, что является "extern".

Rob

Последующий вопрос

Ответ Джона привел к другому вопросу: Могу ли я сообщить компилятору Closure только для определенных типов прекратить переименование свойств?

4b9b3361

Ответ 1

typedefs не участвуют в расчете переименования

Это определение типа:

/** @interface */
function SpanishNoun() {}
/** @type {string} */
SpanishNoun.prototype.english;
/** @type {string} */
SpanishNoun.prototype.spanish;