To wszystko przy założeniu, że noImplicityAny
jest ustawione na true
.Używanie nowych funkcji nie działa, chyba że zostaną połączone z interfejsem. Czemu?
Biorąc pod uwagę to:
function Bar() {
this.f = 100;
}
to nie działa:
let x = new Bar();
Błąd masz jest:
'nowe' wyrażenie, którego cel brakuje skonstruować podpis, domyślnie ma "dowolny" typ.
OK, myślę, że to ma sens.
Jednakże, jeśli dodam interfejs do mieszanki, to działa dobrze:
interface Bar {
f: number;
}
function Bar() {
this.f = 100;
}
let x = new Bar();
console.log(x.f);
Po najechaniu Bar
widać to jako typ:
interface Bar function Bar(): void
więc mogę to trwa scalanie. Po prostu nie wiem, dlaczego to działa teraz? Czym dokładnie jest ten nowy scalony typ i dlaczego typ zwrotu funkcji Bar()
nie jest już domniemany jako any
?
Tylko zgadnij, ale interfejs oznacza, że nowy obiekt nie może być typu "dowolny". Wciąż świetne pytanie, chcę wiedzieć więcej :) –