国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使用duckie為JS做強類型檢查

tuomao / 1251人閱讀

摘要:比如篇首這東西,使用聲明聲明一個類型跟聲明一個對象般簡單,完全沒有學習成本。總結使用可以像聲明一個變量那樣聲明你的類型,且可以在運行時進行類型檢查。

JS是一門動態(tài)類型語言,在定義一個函數(shù)時,無法為其進行強類型指定,如:

function hello(name: string, content: string) {
   // 如果name或content不是string類型的話,就拋異常
}

如果沒有類型指定的話:

開發(fā)者常常不知道一個函數(shù)需要什么數(shù)據(jù)類型。

出現(xiàn)奇怪錯誤時,給debug造成麻煩。

其實業(yè)界已經有兩種解決辦法:

使用JSDoc對函數(shù)進行注釋

使用強類型語言編程,最后編譯成JS.

首先說第一種,JSDoc的語法規(guī)則可謂麻煩,注釋簡單類型時還稍微OK,如:

/**
 * @param string name the name of the person
 * @param string content the content to say
 */
function hello(name, content) { //... }

但如果我想對如下的數(shù)據(jù)結構做注釋呢?

javascript{
    name: "jack",
    age: 18,
    address: {
        country: "china",
        city: "beijing"
    },
    keywords: ["student", "programmer", "ios"]
}

基本上沒幾個人能寫的對JSDoc的注釋,要對上述結構進行JSDoc,你需要:

艱難的Google它奇怪的語法。

寫出來還很丑。

最后其它開發(fā)者也看不懂。

參數(shù)傳錯也沒有錯誤提示。(WebStorm一定程度上可以進行類型推導)。

第二種,嗯,就不說了。

要想基本沒有學習成本的進行類型聲明和檢查,下面進入正題,使用duckie.

安裝

對于node/browserify/webpack的用戶,直接:

npm install duckie

var t = require("duckie"); // go!

對于瀏覽器用戶,可以直接使用https://github.com/ssnau/duckie/tree/master/build下已經編譯好的文件,也可用bower安裝。最后可以使用window.duckie

入門

回到篇首,如果想實現(xiàn)function hello(name:string, content:string)該如何實現(xiàn)呢?

function hello(name, content) {
    duckie.string.assert(name);
    duckie.string.assert(content);

    // 如果上面的斷言不成立的話,將拋出異常
}

string只是個示例,duckie總共支持如下一些基本類型:

boolean/bool

number

string

undefined

null

array

object

anything, 表示任意類型

即如下斷言都為真:

duckie.boolean.assert(true);
duckie.number.assert(123);
duckie.string.assert("hello");
duckie.undefined.assert(undefined);
duckie.null.assert(null);
duckie.aray.assert([1,2,3]);
duckie.object.assert({name: "jack"});
duckie.anything.assert("blabla");

如果只是斷言簡單的類型,那大可不必用duckie,JSDoc就基本能完成這種功效,除了不會拋異常。

duckie真正有效的地方在于,定義復雜的數(shù)據(jù)結構。

我們一個一個說起。

如果一個變量是枚舉類型,如何限定它的枚舉值呢?

使用oneOf.

// 只有值為male或female的變量,才能通過認證
duckie.oneOf(["male", "female"]).assert("male") => true
duckie.oneOf(["male", "female"]).assert(1)      => false
如果一個變量的類型,可能是undefined,可能是string,該如何表示?

使用maybe

duckie.maybe(String).assert("hello") => true
duckie.maybe(String).assert(undefined) => true
duckie.maybe(String).assert(123) => false

/*注:String可替換為duckie.string或"string",意義都一樣*/
如果一個變量的類型可能是string,可能是number呢?

使用oneOfType

duckie.oneOfType([String, Number]).assert(1) => true
duckie.oneOfType([String, Number]).assert("hello") => true
duckie.oneOfType([String, Number]).assert(true) => false
如果一個變量是一個由數(shù)字組成的數(shù)組,該如何表示?

使用arrayOf(Number),或[Number].

// 使用arrayOf
duckie.arrayOf(Number).assert([1,2,3]) => true
// 直接使用[/*類型*/]
duckie([Number]).assert([1,2,3]) => true
duckie(["number"]).assert(["hello", "world"]) => false

/* 注: 類型聲明使用Number,duckie.number 和 "number" 效果是一樣的。*/

如果一個變量是由一些key:value組成呢?

使用objectOf,或[].

//例如定義一個Person數(shù)據(jù)結構,典型的變量如下:
var person = {
    name: "jack",
    age: 18
};

duckie.objectOf({
    name: String,
    age: Number
}).assert(person)  => true

duckie({
    name: String,
    age: Number
}).assert(person) => true

// 鴨子斷言,即只要求被斷言對象符合定義的
// 鍵值類型要求,而不要求精確匹配鍵數(shù)量
duckie({
    name: String
}).assert(person) => true

duckie({
    name: Number
}).assert(person) => false

如果一個變量是個object,里面有些值是數(shù)組呢?

以聲明變量的方式用duckie聲明你的類型。

// 比如篇首這東西
var person = {
    name: "jack",
    age: 18,
    address: {
        country: "china",
        city: "beijing"
    },
    keywords: ["student", "programmer", "ios"]
}

// 使用duckie聲明
duckie({
    name: String,
    age: Number,
    address: {
        country: String,
        city: String
    },
    keywords: [String]
}).assert(person)  => true

聲明一個類型跟聲明一個對象般簡單,完全沒有學習成本。

總結

使用duckie可以像聲明一個變量那樣聲明你的類型,且可以在運行時進行類型檢查。如有什么建議,歡迎提議。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/85553.html

相關文章

  • 發(fā)布IoT云服務2.0,以“聯(lián)接+云+智能”使能產業(yè)物聯(lián)網

    摘要:在期間,華為正式發(fā)布云服務,聚焦物聯(lián)網基礎設施,構建產業(yè)生態(tài)黑土地,通過做大聯(lián)接利用云服務和智能做強產業(yè)物聯(lián)網,使能行業(yè)數(shù)字化。在HUAWEI CONNECT 2018期間,華為正式發(fā)布IoT云服務2.0,聚焦物聯(lián)網基礎設施,構建產業(yè)生態(tài)黑土地,通過做大聯(lián)接、利用云服務和AI智能做強產業(yè)物聯(lián)網,使能行業(yè)數(shù)字化。華為云核心網產品線總裁馬海旭發(fā)布IoT云服務2.0根據(jù)華為GIV(全球產業(yè)愿景)報...

    coordinate35 評論0 收藏0
  • [JavaScript 隨筆] 理解嚴格相等、非嚴格相等和隱式類型轉換

    摘要:顯然,相等判斷是基于數(shù)字比較的,而條件判斷是基于布爾值。嚴格相等嚴格相等的邏輯相對簡單粗暴,如果類型不同,就不考慮隱式轉換了,直接為假。 JavaScript 中大概有這幾種 類型: undefined null string boolean number object function 之所以在 類型 上加了雙引號,是因為嚴格來說,null 的類型是 object。但本文討論的主...

    rickchen 評論0 收藏0
  • 亞馬遜賣家專用vps有沒有?哪家亞馬遜云主機好用呢?

    亞馬遜賣家專用vps有沒有?亞馬遜賣家最害怕的是什么,那就是被檢測到使用同一個IP地址運營多個店鋪,導致店鋪被封禁的情況,而云服務器可以完美解決這種問題,至于原因為何,且聽我滿滿道來!哪家亞馬遜云主機好用呢?只要IP純凈,服務器穩(wěn)定,用于亞馬遜是很安全的,你可以百度搜索易探云,這家是專業(yè)的海外運營云服務器商家,同時推出美國電商云,保證IP純凈~搞亞馬遜運營店鋪,云服務器是絕佳選擇,而易探云優(yōu)惠力度...

    番茄西紅柿 評論0 收藏2637
  • UCloud優(yōu)刻得獲頒上海市民營企業(yè)總部匾牌

    摘要:為促進本市民營企業(yè)做強做優(yōu),實現(xiàn)創(chuàng)新發(fā)展,月日下午,上海市民營企業(yè)總部頒證儀式在市政府舉行,優(yōu)刻得作為上海市民營企業(yè)總部代表企業(yè)獲頒牌匾,成為上海市民營經濟發(fā)展的代表性企業(yè)之一。為促進本市民營企業(yè)做強做優(yōu),實現(xiàn)創(chuàng)新發(fā)展,4月15日下午,上海市民營企業(yè)總部頒證儀式在市政府舉行,UCloud優(yōu)刻得作為上海市民營企業(yè)總部代表企業(yè)獲頒牌匾,成為上海市民營經濟發(fā)展的代表性企業(yè)之一。根據(jù)上海市委、市政府...

    Tecode 評論0 收藏0
  • 亞馬遜vps是什么意思?亞馬遜vps怎么用及價格多少錢?

    摘要:亞馬遜是什么意思亞馬遜是什么意思亞馬遜官方要求,一個人只能在亞馬遜上申請注冊一個商家?guī)簦豢梢赃\營或維護多個商家?guī)簟嗰R遜vps是什么意思?亞馬遜官方要求,一個人只能在亞馬遜上申請注冊一個商家?guī)簦豢梢赃\營或維護多個商家?guī)簟H绻麃嗰R遜的程序優(yōu)化算法認為某幾個帳戶都是同一個人來操作,那么這幾個賬戶就會被亞馬遜評定為互相關聯(lián)。因此,開亞馬遜店鋪,有一個好的VPS,開店就會順暢許多。所以,...

    番茄西紅柿 評論0 收藏2637

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<