¿Puedo decirle al compilador de Closure que, solo para tipos específicos, deje de cambiar el nombre de las propiedades?

Esta pregunta sigue: ¿Por qué el compilador Closure renombra las propiedades de un tipo externo? La respuesta de John a esa pregunta plantea esta segunda pregunta.

Si declaro el tipo externo como se sugiere:

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

then Javascript como:

/**
 * @param {SpanishNoun} n 
 */
exp.foo = function (n) {
    console.log(n.english, n.spanish, n['english'], n['spanish']);  
}

compilará, según lo desee, para:

function(a){console.log(a.english,a.spanish,a.english,a.spanish)};

Las propiedades no se renombran como de costumbre. Sin la declaración externa, el código compilado se vería así:

function(a){console.log(a.a,a.c,a.english,a.spanish)

Eso está todo bien. El problema es que el compilador ha dejado de cambiar el nombre de 'inglés' y 'español' entodo lugares. Incluso si no están en el tipo externo.

/**
 * @param {AnotherType}  
 */
exp.bar = function (c) {
    c.other = c.english;
}

compila a ...

function(a){a.b=a.english};

¿Hay alguna forma de detener esto? Si no, ¿hay alguna razón para este comportamiento?

Quería usar tipos externos para manejar cosas como objetos JSON que se originan en el servidor y no tienen propiedades renombradas. Pero si cada vez que declaro un externo, estoy consumiendo la capacidad del compilador para cambiar el nombre y reducir el código, encontraré otra forma. Tal vez tomaré el mapa de cambio de nombre de propiedad generado por el compilador --property_map_output_file) y úselo en el servidor al generar respuestas JSON.

Respuestas a la pregunta(1)

Su respuesta a la pregunta