每Structural Subtyping打字稿對象類型相比,結構上
對象類型結構比較。例如,在下面的代碼 片段中,'CPoint'類匹配'Point'接口,因爲 'CPoint'具有'Point'的所有必需成員。一個類 可以聲明它實現了一個接口,以便編譯器將檢查聲明的結構兼容性。 示例還說明,只要對象文字「 」提供了所有必需的成員,對象類型就可以匹配從對象文字中推斷出的類型 。
interface Point {
x: number;
y: number; }
function getX(p: Point) {
return p.x; }
class CPoint {
x: number;
y: number;
constructor(x: number, y: number) {
this.x = x;
this.y = y;
} }
getX(new CPoint(0, 0)); // Ok, fields match
getX({ x: 0, y: 0, color: "red" }); // Extra fields Ok
getX({ x: 0 }); // Error: supplied parameter does not match
在他們的示例CPoint
被認爲Point
型的,因爲它是Point
I型可以在任何地方我可以一個Point
傳遞它。如果Point
聲明所有實現者都有方法Foo(x:string)
,CPoint
將不具有該方法。因此,如果CPoint
被傳入,任何接受Point
並希望使用Foo
的人都會炸燬。
我的問題是,我是否解釋了這個錯誤,如果不是,爲什麼這被認爲足以放入語言規範?