亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

typescript中聲明合并介紹

 更新時間:2022年09月15日 10:42:02   作者:RadiumAg???????  
這篇文章主要介紹了typescript中聲明合并介紹,類型合并表明編譯器將合并兩個分開的并且名稱相同的聲明,合并之后的聲明擁有兩個聲明的特點,任意數(shù)量的聲明可以被合并,不僅限兩個,更多相關內(nèi)容需要的朋友可以參考下面文章內(nèi)容

聲明合并

類型合并表明編譯器合并兩個分開的并且名稱相同的聲明,合并之后的聲明擁有兩個聲明的特點,任意數(shù)量的聲明可以被合并,不僅限兩個。

合并Interface

1.interface的非函數(shù)成員應該是唯一的,如果兩個interface都聲明一個名稱相同但類型不同非函數(shù)成員編譯器將提示錯誤:

interface Box { 
   height: number; 
 }
interface Box {
   height: string; 
 }

2.對于函數(shù)成員,每個相同名稱的成員被看作是相同名稱函數(shù)的重載,但是當出現(xiàn)兩個interface時,第二個有更高的優(yōu)先級,會覆蓋前一個:

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;
}

當然這個規(guī)則有一個例外,當函數(shù)的參數(shù)類型是一個單字面量類型(single string literal type),它將會根據(jù)優(yōu)先級排序,并放在聲明頂部

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;
}

// 字面量根據(jù)冒泡排序并放在了聲明頂部
interface Document {
  createElement(tagName: 'canvas'): HTMLCanvasElement;
  createElement(tagName: 'div'): HTMLDivElement;
  createElement(tagName: 'span'): HTMLSpanElement;
  createElement(tagName: string): HTMLElement;
  createElement(tagName: any): Element;
}

合并Namespace

  • 合并兩個相同名稱的namespace時,將進一步添加第二個namespace導出的成員到第一個namespace。
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 class Dog {}
}
  • 當一個namespace發(fā)生合并時,和它合并的namesapce不能訪問它的未導出的成員
namespace Animal {
  const haveMuscles = true;
  export function animalsHaveMuscles() {
    return haveMuscles;
  }
}
namespace Animal {
  export function doAnimalsHaveMuscles() {
    return haveMuscles; // Error, because haveMuscles is not accessible here
  }
}

可以看到無法訪問haveMuscles,同時運行也會報錯,可以結合編譯后的例子看:

namespace和class、enum、function合并

  • 和合并namespace一樣,class可以訪問namespace中導出的類型
class Album {
  label: Album.AlbumLabel;
}
namespace Album {
  export class AlbumLabel {}
}
  • namespacefunction合并可以像javascript那樣在方法上添加屬性:
function buildLabel(name: string): string {
  return buildLabel.prefix + name + buildLabel.suffix;
}
namespace buildLabel {
  export const suffix = '';
  export const prefix = 'Hello, ';
}
console.log(buildLabel('Sam Smith'));

可以看編譯之后的代碼,可以看到直接在buildLabel上添加了屬性:

  • namespaceenum發(fā)生合并時,namespace可以擴展enum
enum Color {
  red = 1,
  green = 2,
  blue = 4,
}
namespace Color {
  export function mixColor(colorName: string) {
    if (colorName == 'yellow') {
      return Color.red + Color.green;
    } else if (colorName == 'white') {
      return Color.red + Color.green + Color.blue;
    } else if (colorName == 'magenta') {
      return Color.red + Color.blue;
    } else if (colorName == 'cyan') {
      return Color.green + Color.blue;
    }
  }
}

可以看編譯之后的:

class之間不允許合并,但是如果需要模仿類似功能,可以參照 Mixins in Typscripts

Module擴展

盡管Module之間是不支持合并的,但是你可以通過導入需要擴展的方法,然后再更改它,這種方式去實現(xiàn):

// observable.ts
export class Observable<T> {
  // ... implementation left as an exercise for the reader ...
}

// map.ts
import { Observable } from "./observable";
Observable.prototype.map = function (f) {
  // ... another exercise for the reader
};

但是這樣編譯器并不能提供良好的提示,所以需要擴展module聲明:

// observable.ts
export class Observable<T> {
  // ... implementation left as an exercise for the reader ...
}

// map.ts
import { Observable } from "./observable";
declare module "./observable" {
  interface Observable<T> {
    map<U>(f: (x: T) => U): Observable<U>;
  }
} 
// 擴展聲明
Observable.prototype.map = function (f) {
  // ... another exercise for the reader
};

// consumer.ts
import { Observable } from "./observable";
import "./map";
let o: Observable<number>;
o.map((x) => x.toFixed());

全局擴展

如果在模塊中,也可以在全局聲明中擴展:

// observable.ts
export class Observable<T> {
  // ... still no implementation ...
}
// 在這里擴展
declare global {
  interface Array<T> {
    toObservable(): Observable<T>;
  }
}
Array.prototype.toObservable = function () {
  // ...
};

到此這篇關于typescript中聲明合并介紹的文章就介紹到這了,更多相關typescript聲明合并內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • js讀取json的兩種常用方法示例介紹

    js讀取json的兩種常用方法示例介紹

    js讀取json的方法或許很多,但常用的就那兩種,本文以示例代碼的方式為大家介紹下其具體的實現(xiàn)
    2014-10-10
  • js百度地圖滾輪縮放所在點偏移問題解決

    js百度地圖滾輪縮放所在點偏移問題解決

    本文主要介紹了js百度地圖滾輪縮放所在點偏移問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • JavaScript正則表達式中g標志詳解

    JavaScript正則表達式中g標志詳解

    正則的思想都是一樣的,但是具體的寫法會有所不同,下面這篇文章主要給大家介紹了關于JavaScript正則表達式中g標志的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-03-03
  • 用javascript實現(xiàn)簡單計算器

    用javascript實現(xiàn)簡單計算器

    這篇文章主要為大家詳細介紹了用javascript實現(xiàn)簡單計算器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Jquery中刪除元素的實現(xiàn)代碼

    Jquery中刪除元素的實現(xiàn)代碼

    empty用來刪除指定元素的子元素,remove用來刪除元素,或者設定細化條件執(zhí)行刪除
    2011-12-12
  • JS實現(xiàn)圖片預覽的兩種方式

    JS實現(xiàn)圖片預覽的兩種方式

    這篇文章主要介紹了JS實現(xiàn)圖片預覽的兩種方式,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-06-06
  • 利用JS判斷數(shù)據(jù)類型的四種方法

    利用JS判斷數(shù)據(jù)類型的四種方法

    面試的時候經(jīng)常會問到JS 中 判斷數(shù)據(jù)類型的方法,一般常用的 就是typeof了 ,其他的也想不起來,今天特意在網(wǎng)上查了一下來總結,這篇文章主要介紹了利用JS判斷數(shù)據(jù)類型的四種方法,需要的朋友可以參考下
    2021-08-08
  • div失去焦點事件實現(xiàn)思路

    div失去焦點事件實現(xiàn)思路

    blur只是針對form表單控件的,而對于 span , div , li 之類的,則沒辦法觸發(fā)它們的動作,本文有個示例,看看是怎么實現(xiàn)的
    2014-04-04
  • 前端解析包含圖片的excel文件完整步驟及代碼示例

    前端解析包含圖片的excel文件完整步驟及代碼示例

    作為一名開發(fā)者,大家在開發(fā)過程中是不是經(jīng)常遇到各種各樣的文件,比如xlsx、word、ppt等辦公類型的文件格式,這篇文章主要給大家介紹了關于前端解析包含圖片的excel文件的相關資料,需要的朋友可以參考下
    2024-07-07
  • 原生JS實現(xiàn)的跳一跳小游戲完整實例

    原生JS實現(xiàn)的跳一跳小游戲完整實例

    這篇文章主要介紹了原生JS實現(xiàn)的跳一跳小游戲,結合完整實例形式分析了javascript實現(xiàn)跳一跳游戲的原理、實現(xiàn)步驟與相關操作技巧,需要的朋友可以參考下
    2019-01-01

最新評論