typescript - ¿Por qué un atributo predeterminado se traduce a nada en lugar de undefined?
Si tengo una clase con un atributo en Typescript, creará una clase sin el atributo en Javascript. Este es también el comportamiento para las interfaces.
El siguiente Typescript:
class Foo{
bar : string;
}
let x = new Foo();
console.log("bar" in x); // results in false
Se traducirá en el siguiente JS (objetivo es6):
class Foo {
}
let x = new Foo();
console.log("bar" in x);
Esperaría un atributo que tenga el valor predeterminado de undefined así:
class Foo{
bar : string = undefined;
}
let x = new Foo();
console.log("bar" in x); // returns true
eso se traducirá en el código esperado:
class Foo {
constructor() {
this.bar = undefined;
}
}
let x = new Foo();
console.log("bar" in x);
Además, si creo una interfaz con un atributo, no me permitirá crear una clase que no implemente el atributo (como se esperaba), pero con el atributo crea el mismo JS resultante como en el primer ejemplo.
interface Bar{
bar : string;
}
class Foo implements Bar{
bar : string;
}
let x = new Foo();
console.log("bar" in x); // returns false
Parece que este comportamiento es deseado, pero no entiendo el motivo ni ninguna ventaja (¿hay alguna?). Y ¿hay alguna manera de hacer que Typescript cree atributos indefinidos, sin cambiar el TS original?