十三、合併を宣言する
2840 ワード
紹介する
コンパイラが同じ名前の2つの独立した宣言を単一の宣言にマージし、マージ後の宣言が元の2つの宣言の特性を持つことを指します.
注意:任意の数の宣言をマージできます.
//
interface Box {
height: number;
width: number;
}
interface Box {
scale: number;
}
let box: Box = {height: 5, width: 6, scale: 10};
console.log(box)
TSの宣言により、次の3つのエンティティのいずれかが作成されます.
マージインタフェース:最も簡単で最も一般的なマージタイプはインタフェースのマージです.マージメカニズムは、双方のメンバーを同じ名前のインタフェースに配置することです.
注意事項:
//
interface Animal {}
interface Sheep {}
interface Dog {}
interface Cat {}
interface Cloner {
clone(animal: Animal): Animal;
}
interface Cloner {
clone(animal: Sheep): Sheep;
}
interface Cloner {
clone(animal: Dog): Dog;
clone(animal: Cat): Cat;
}
//
interface Cloner {
clone(animal: Dog): Dog;
clone(animal: Cat): Cat;
clone(animal: Sheep): Sheep;
clone(animal: Animal): Animal;
}
例外:特殊な関数署名が発生した場合、署名にパラメータのタイプが単一の文字列の字面量である場合、彼はリロードリストの最上位に昇格します.
//
interface Document {
createElement(tagName: any): Element;
}
interface Document {
createElement(tagName: 'div'): HTMLDivElement;
createElement(tagName: 'span'): HTMLSpanElement;
}
interface Document {
createElement(tagName: string): HTMLElement;
createElement(tagName: "canvas"): HTMLCanvasElement;
}
//
interface Document {
createElement(tagName: "canvas"): HTMLCanvasElement;
createElement(tagName: "div"): HTMLDivElement;
createElement(tagName: "span"): HTMLSpanElement;
createElement(tagName: string): HTMLElement;
createElement(tagName: any): Element;
}
ネーミングスペースのマージ
インタフェースと同様に、同じ名前のネーミングスペースもメンバーを結合します.
namespace Animals {
export class Zebra {}
}
namespace Animals {
export interface Legged { numberOfLegs: number; }
export class Dog {}
}
//
namespace Animals {
export interface Legged { numberOfLegs: number; };
export class Zebra { }
export clasas Dog { }
}
//
namespace Animal {
let haveMuscles = true;
export function animalsHaveMuscles() {
return haveMuscles;
}
}
// doAnimalsHaveMuscles ,
namespace Animal {
export function doAnimalsHaveMuscles() {
// return haveMuscles; // Error, because haveMuscles is not accessible here
}
}