TypeScript Wo ist der Unterschied?

Hendoul

Commander
Registriert
Apr. 2008
Beiträge
2.052
Hi :)

Folgendes Beispiel hier eingeben:
https://www.typescriptlang.org/play/index.html

Javascript:
interface Car {
    color: string
}

const myFunction = function (param: Car) {
    // noop
}

let myCar = {
    color: 'green',
    model: 'xyz'
}

myFunction({color: 'red', model: 'aaa'});

Warum geht das nicht, aber das hier:
Javascript:
myFunction(myCar);

Das sind doch beides Object Literals? Wo ist der Unterschied?
 
Der "excess property check" wird nicht angewendet wenn man das Object Literal einer Variable zuweist. Das kann man in der Dokumentation zu Interfaces nachlesen:

https://www.typescriptlang.org/docs/handbook/interfaces.html#excess-property-checks

Die Idee ist, soweit ich sie verstehe, das dieser Check nur in sehr eng begrenzten Fällen angewendet wird da er anonsten sehr nervige False Positives verursachen würde. Zum Beispiel wenn die Variable in diesem Beispiel dann in einer späteren Funktion verwendet wird die beide Properties erwartet.
 
  • Gefällt mir
Reaktionen: Hayda Ministral und majusss
Zurück
Oben