最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

TypeScript對于Duck類型和模塊命名空間應(yīng)用

 更新時間:2022年08月18日 14:10:10   作者:黎燃黎燃???????  
這篇文章主要介紹了TypeScript對于Duck類型和模塊命名空間應(yīng)用,Duck類型是一種動態(tài)類型和多態(tài)形式,在duck類型中,重點是對象的行為可以做什么,而不是對象所屬的類型

一.TypeScript 鴨子類型

Duck類型是一種動態(tài)類型和多態(tài)形式。
在這種風(fēng)格中,對象的有效語義不是通過從特定類繼承或?qū)崿F(xiàn)特定接口來確定的,而是通過“當(dāng)前方法和屬性的集合”來確定的。

var object_name = { 
    key1: "value1", // 標(biāo)量
    key2: "value",  
    key3: function() {
        // 函數(shù)
    }, 
    key4:["content1", "content2"] //集合
}

在duck類型中,重點是對象的行為可以做什么,而不是對象所屬的類型。
例如,在不使用duck類型的語言中,我們可以編寫一個函數(shù),該函數(shù)接受“duck”類型的對象并調(diào)用其“walk”和“call”方法。
在使用duck類型的語言中,這樣的函數(shù)可以接受任何類型的對象并調(diào)用其“go”和“call”方法。
如果這些需要調(diào)用的方法不存在,則會引發(fā)運行時錯誤。具有這種正確的“go”和“call”方法的任何對象都可以被函數(shù)接受。
此行為導(dǎo)致上述表達(dá)式,并將此確定類型的方法命名為鴨子類型。

interface IPoint { 
    x:number 
    y:number 
} 
function addPoints(p1:IPoint,p2:IPoint):IPoint { 
    var x = p1.x + p2.x 
    var y = p1.y + p2.y 
    return {x:x,y:y} 
} 
 
// 正確
var newPoint = addPoints({x:3,y:4},{x:5,y:1})  
 
// 錯誤 
var newPoint2 = addPoints({x:1},{x:4,y:3})

二.TypeScript 命名空間

名稱空間最明確的目的之一是解決重復(fù)名稱的問題。
假設(shè)班上有兩個叫小明的學(xué)生。為了清楚地區(qū)分他們,我們必須使用他們名字之外的一些附加信息,例如他們的姓氏(王曉明、李曉明)或他們父母的名字。
命名空間定義標(biāo)識符的可見范圍。一個標(biāo)識符可以在多個名稱空間中定義,它在不同名稱空間中的含義是無關(guān)的。這樣,任何標(biāo)識符都可以在新名稱空間中定義,并且它們不會與任何現(xiàn)有標(biāo)識符沖突,因為現(xiàn)有定義在其他名稱空間中。

typescript中的命名空間由命名空間定義。語法格式如下:

namespace SomeNameSpaceName { 
   export interface ISomeInterfaceName {      }  
   export class SomeClassName {      }  
}

上面定義了一個名稱空間somenamespacename。
如果我們需要在外部調(diào)用somenamespacename中的類和接口,我們需要向類和接口添加export關(guān)鍵字。

要調(diào)用另一個命名空間,語法格式為:

SomeNameSpaceName.SomeClassName;

如果命名空間位于單獨的typescript文件中,則應(yīng)使用三個斜杠///引用它。

語法格式如下:

/// <reference path = "SomeFileName.ts" />
namespace Drawing { 
    export interface IShape { 
        draw(); 
    }
}

名稱空間支持嵌套,也就是說,可以在另一個名稱空間中定義名稱空間。

namespace Runoob { 
   export namespace invoiceApp { 
      export class Invoice { 
         public calculateDiscount(price: number) {
            return price * .40;
         }
      }
   }
}

三.TypeScript 模塊

typescript模塊設(shè)計有可替換的組織代碼。
模塊在其自己的范圍內(nèi)執(zhí)行,而不是在全局范圍內(nèi),這意味著模塊中定義的變量、函數(shù)和類在模塊外部不可見,除非它們使用導(dǎo)出顯式導(dǎo)出。
同樣,我們必須導(dǎo)入其他模塊通過導(dǎo)入導(dǎo)出的變量、函數(shù)、類等。
這兩個模塊之間的關(guān)系是通過在文件級使用導(dǎo)入和導(dǎo)出來建立的。
模塊使用模塊加載器導(dǎo)入其他模塊。在運行時,模塊加載器的功能是在執(zhí)行模塊代碼之前查找并執(zhí)行模塊的所有依賴項。最常見的JavaScript模塊加載器是為node JS和require提供服務(wù)。用于web應(yīng)用程序的js。
此外,還有systemjs和webpack。

模塊導(dǎo)出使用關(guān)鍵字export。語法格式如下:

// 文件名 : SomeInterface.ts 
export interface SomeInterface { 
   // 代碼部分
}

要在其他文件中使用此模塊,需要使用導(dǎo)入關(guān)鍵字進(jìn)行導(dǎo)入:

import someInterfaceRef = require("./SomeInterface");

TestShape.js 文件代碼為:

define(["require", "exports", "./Circle", "./Triangle"], 
   function (require, exports, circle, triangle) {
   
   function drawAllShapes(shapeToDraw) {
      shapeToDraw.draw();
   }
   drawAllShapes(new circle.Circle());
   drawAllShapes(new triangle.Triangle());
});

四.類型腳本聲明文件

作為JavaScript的超集,typescript在開發(fā)過程中不可避免地引用了其他第三方JavaScript庫。
雖然可以通過直接引用調(diào)用庫的類和方法,但不能使用類型腳本功能,如類型檢查。
為了解決這個問題,我們需要刪除這些庫中的函數(shù)和方法體,只保留導(dǎo)出的類型聲明。
相反,將生成描述JavaScript庫和模塊信息的聲明文件。
通過引用此聲明文件,可以借用typescript的各種功能來使用庫文件。

如果我們想使用第三方庫,比如jQuery,我們通常會得到一個ID為foo的元素,如下所示:

$('#foo');
// 或
jQuery('#foo');

但在typescript中,我們不知道$jQuery是什么:

jQuery('#foo');

// index.ts(1,1): error TS2304: Cannot find name 'jQuery'.

此時,我們需要使用declare關(guān)鍵字定義其類型,以幫助typescript判斷傳入的參數(shù)類型是否正確:

declare var jQuery: (selector: string) => any;

jQuery('#foo');

declare定義的類型僅用于編譯時的檢查,并將從編譯結(jié)果中刪除。
上述示例的編譯結(jié)果是:

聲明文件以 .d.ts 為后綴,例如:

runoob.d.ts

聲明文件或模塊的語法格式如下:

declare module Module_Name {
}

Typescript導(dǎo)入聲明文件語法格式:

/// <reference path = " runoob.d.ts" />

到此這篇關(guān)于TypeScript對于Duck類型和模塊命名空間應(yīng)用的文章就介紹到這了,更多相關(guān)TypeScript Duck類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • js多個物體運動功能實例分析

    js多個物體運動功能實例分析

    這篇文章主要介紹了js多個物體運動功能,結(jié)合實例形式分析了js實現(xiàn)多物體運動功能的原理、實現(xiàn)技巧與相關(guān)注意事項,需要的朋友可以參考下
    2016-12-12
  • ES6解構(gòu)賦值(數(shù)組,對象,函數(shù))使用詳解

    ES6解構(gòu)賦值(數(shù)組,對象,函數(shù))使用詳解

    這篇文章主要介紹了ES6解構(gòu)賦值(數(shù)組,對象,函數(shù))使用詳解,JavaScript 中最常用的兩種數(shù)據(jù)結(jié)構(gòu)是 Object 和 Array,解構(gòu)操作對那些具有很多參數(shù)和默認(rèn)值等的函數(shù)也很奏效,本文通過實例代碼詳細(xì)講解需要的朋友可以參考下
    2022-11-11
  • javascript document.referrer 用法

    javascript document.referrer 用法

    document對象的referrer屬性,返回導(dǎo)航到當(dāng)前網(wǎng)頁的超鏈接所在網(wǎng)頁的URL。
    2009-04-04
  • 兩種常用的javascript數(shù)組去重方法思路及代碼

    兩種常用的javascript數(shù)組去重方法思路及代碼

    第一種是常規(guī)的方法:建一個新的數(shù)組存放結(jié)果,for循環(huán)中每次從原數(shù)組中取出一個元素,用indexOf查找新數(shù)組中是否有該元素,至于第二種詳細(xì)的看下本文哦
    2013-03-03
  • 原生js實現(xiàn)html手機(jī)端城市列表索引選擇城市

    原生js實現(xiàn)html手機(jī)端城市列表索引選擇城市

    這篇文章主要為大家詳細(xì)介紹了原生js實現(xiàn)html手機(jī)端城市列表索引選擇城市,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • JS實現(xiàn)商品櫥窗特效

    JS實現(xiàn)商品櫥窗特效

    這篇文章主要為大家詳細(xì)介紹了JS實現(xiàn)商品櫥窗特效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • JavaScript中異步編程的實現(xiàn)方式詳細(xì)講解

    JavaScript中異步編程的實現(xiàn)方式詳細(xì)講解

    JavaScript異步編程是一種讓程序在處理耗時任務(wù)時不阻塞主線程的技術(shù),它通過回調(diào)函數(shù)、Promise和async/await等機(jī)制來實現(xiàn)任務(wù)的并發(fā)執(zhí)行,這篇文章主要介紹了JavaScript中異步編程的實現(xiàn)方式,需要的朋友可以參考下
    2025-10-10
  • JScript分割字符串示例代碼

    JScript分割字符串示例代碼

    分割字符串的方法有很多,下面為大家介紹下使用JScript簡單實現(xiàn)下,喜歡的朋友可以參考下
    2013-09-09
  • 第一次接觸神奇的Bootstrap基礎(chǔ)排版

    第一次接觸神奇的Bootstrap基礎(chǔ)排版

    第一次接觸神奇的Bootstrap基礎(chǔ)排版,Bootstrap讓W(xué)eb開發(fā)更迅速、更簡單,感興趣的小伙伴們可以參考一下
    2016-07-07
  • bootstrapValidator.min.js表單驗證插件

    bootstrapValidator.min.js表單驗證插件

    這篇文章主要為大家詳細(xì)介紹了bootstrapValidator.min.js表單驗證插件的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02

最新評論

常熟市| 临夏市| 舞阳县| 青州市| 郸城县| 伊宁县| 武夷山市| 辉县市| 泰和县| 安宁市| 沽源县| 东台市| 长乐市| 冕宁县| 平遥县| 思茅市| 洪雅县| 南雄市| 鹤山市| 柘荣县| 黄山市| 莱州市| 翼城县| 甘孜县| 集安市| 昌邑市| 西贡区| 淳化县| 汾西县| 南木林县| 申扎县| 民权县| 玛多县| 长兴县| 余干县| 崇礼县| 安丘市| 清远市| 武鸣县| 华坪县| 麦盖提县|