No.
Корень проблемы в том, что JavaScript часто рассматривает примитивные значения, как если бы они были их объектов типизированных эквиваленты (String
/Number
/и т.д.) при использовании в условиях, когда требуется объект (например, доступ к свойству).
TypeScript моделирует это с использованием «кажущегося типа», в котором объекты примитивного типа, как представляется, имеют элементы соответствующих типов объектов. Это потому, что интуитивно, подобный код должен компилируется без ошибок:
function fn(x: { toString(): string }) { /* ... */ }
fn(32); // Should be OK because (32).toString() is OK
fn('foo'); // Should be OK because ('foo').toString() is OK
Это маленький шаг к этому коду:
function fn(x: { toString(): string; other?: whatever; }) { /* ... */ }
fn(32); // Should be OK
fn('foo'); // Should be OK
И еще один маленький шаг к этому коду:
function fn(x: { other?: whatever; }) { /* ... */ }
fn(32); // OK, I guess?
fn('foo'); // OK, I guess?
Существует issue on GitHub отслеживание общей проблемы, что интерфейс со всеми необязательными свойствами фактически никогда не является источником ошибки при присвоении -. Это очень сложно.
Нет неверных данных - возможно сейчас. – User1