【第9篇】TypeScript声明合并Merging 案例代码详解

 

10.1合并interface使用

/**

 * Merging Interfaces

 * 合并接口..

 * 最简单的,也许是最常见的,类型声明合并是合并接口。将两个相同的接口合并在一块.

 */

interface Box {

    height: number;

    width: number;

}

interface Box {

    scale: number;

}

var box: Box = {height: 5, width: 6, scale: 10};

 

interface Document {

    createElement(tagName: any): Element;

}

interface Document {

    createElement(tagName: string): HTMLElement;

}

interface Document {

    createElement(tagName: "div"): HTMLDivElement; 

    createElement(tagName: "span"): HTMLSpanElement;

    createElement(tagName: "canvas"): HTMLCanvasElement;

}

 

 

interface Document {

    createElement(tagName: "div"): HTMLDivElement; 

    createElement(tagName: "span"): HTMLSpanElement;

    createElement(tagName: "canvas"): HTMLCanvasElement;

    createElement(tagName: string): HTMLElement;

    createElement(tagName: any): Element;

}

 

/**

 * Merging Interfaces

 * 合并接口..

 */

var box = { height: 5, width: 6, scale: 10 };

 

 

10.2合并module使用

/**

 * Merging Modules

 * 合并块.

  *要合并的价值,在每一个网站的声明,如果一个模块已经给定名称存在,它进一步采取现有的模块

  *并添加第二个模块第一的出口成员扩展。 

  */

module MAnimals {

    export class Zebra { }

}

 

module MAnimals {

    export interface Legged { numberOfLegs: number; }

    export class Dog { }

}

 

//---这个MYAnimals块等同上面两个module

module MYAnimals {

    export interface Legged { numberOfLegs: number; }

    

    export class Zebra { }

    export class Dog { }

}

 

/**

 * 模块合并的这种模式是一个有用的起点,但要得到我们还需要了解同非成员国导出会发生什么更完整的场景画面。

 * 非导出成员只有原来的(未合并)模块中可见,这意味着合并后,合并的成员,来自其他声明无法看到非成员导出

 */

 

module myAnimal {

    var haveMuscles = true;

 

    export function animalsHaveMuscles() {

        return haveMuscles;

    }

}

 

module myAnimal {

    export function doAnimalsHaveMuscles() {

        //return haveMuscles;  // 这里这个值是不可以返回.

    }

}

/**

 * Merging Modules with Classes, Functions, and Enums

 * 合并模块与类,函数和枚举

 * 模块具有足够的灵活性,以也与其它类型的声明合并。要做到这一点,该模块声明必须遵循的声明,将与合并。

 * 由此产生的声明有两种申报类型的属性。在typescript使用这个性能来模拟一些在JavaScript模式以及其它的编程语言

 */

class Album {

    label: Album.AlbumLabel;

}

module Album {

    export class AlbumLabel { }

}

 

 

 

/**

 * Merging Modules

 * 合并块.

  *要合并的价值,在每一个网站的声明,如果一个模块已经给定名称存在,它进一步采取现有的模块

  *并添加第二个模块第一的出口成员扩展。

  */

var MAnimals;

(function (MAnimals) {

    var Zebra = (function () {

        function Zebra() {

        }

        return Zebra;

    })();

    MAnimals.Zebra = Zebra;

})(MAnimals || (MAnimals = {}));

var MAnimals;

(function (MAnimals) {

    var Dog = (function () {

        function Dog() {

        }

        return Dog;

    })();

    MAnimals.Dog = Dog;

})(MAnimals || (MAnimals = {}));

//---这个MYAnimals块等同上面两个module

var MYAnimals;

(function (MYAnimals) {

    var Zebra = (function () {

        function Zebra() {

        }

        return Zebra;

    })();

    MYAnimals.Zebra = Zebra;

    var Dog = (function () {

        function Dog() {

        }

        return Dog;

    })();

    MYAnimals.Dog = Dog;

})(MYAnimals || (MYAnimals = {}));

/**

 * 模块合并的这种模式是一个有用的起点,但要得到我们还需要了解同非成员国导出会发生什么更完整的场景画面。

 * 非导出成员只有原来的(未合并)模块中可见,这意味着合并后,合并的成员,来自其他声明无法看到非成员导出

 */

var myAnimal;

(function (myAnimal) {

    var haveMuscles = true;

    function animalsHaveMuscles() {

        return haveMuscles;

    }

    myAnimal.animalsHaveMuscles = animalsHaveMuscles;

})(myAnimal || (myAnimal = {}));

var myAnimal;

(function (myAnimal) {

    function doAnimalsHaveMuscles() {

        //return haveMuscles;  // 这里这个值是不可以返回.

    }

    myAnimal.doAnimalsHaveMuscles = doAnimalsHaveMuscles;

})(myAnimal || (myAnimal = {}));

/**

 * Merging Modules with Classes, Functions, and Enums

 * 合并模块与类,函数和枚举

 *

 * 模块具有足够的灵活性,以也与其它类型的声明合并。要做到这一点,该模块声明必须遵循的声明,将与合并。

 * 由此产生的声明有两种申报类型的属性。在typescript使用这个性能来模拟一些在JavaScript模式以及其它的编程语言

 */

var Album = (function () {

    function Album() {

    }

    return Album;

})();

var Album;

(function (Album) {

    var AlbumLabel = (function () {

        function AlbumLabel() {

        }

        return AlbumLabel;

    })();

    Album.AlbumLabel = AlbumLabel;

})(Album || (Album = {}));

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱学习的蹭蹭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值