摘要:比如篇首這東西,使用聲明聲明一個類型跟聲明一個對象般簡單,完全沒有學習成本。總結使用可以像聲明一個變量那樣聲明你的類型,且可以在運行時進行類型檢查。
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ā)布云服務,聚焦物聯(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è)愿景)報...
摘要:顯然,相等判斷是基于數(shù)字比較的,而條件判斷是基于布爾值。嚴格相等嚴格相等的邏輯相對簡單粗暴,如果類型不同,就不考慮隱式轉換了,直接為假。 JavaScript 中大概有這幾種 類型: undefined null string boolean number object function 之所以在 類型 上加了雙引號,是因為嚴格來說,null 的類型是 object。但本文討論的主...
亞馬遜賣家專用vps有沒有?亞馬遜賣家最害怕的是什么,那就是被檢測到使用同一個IP地址運營多個店鋪,導致店鋪被封禁的情況,而云服務器可以完美解決這種問題,至于原因為何,且聽我滿滿道來!哪家亞馬遜云主機好用呢?只要IP純凈,服務器穩(wěn)定,用于亞馬遜是很安全的,你可以百度搜索易探云,這家是專業(yè)的海外運營云服務器商家,同時推出美國電商云,保證IP純凈~搞亞馬遜運營店鋪,云服務器是絕佳選擇,而易探云優(yōu)惠力度...
摘要:為促進本市民營企業(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ù)上海市委、市政府...
摘要:亞馬遜是什么意思亞馬遜是什么意思亞馬遜官方要求,一個人只能在亞馬遜上申請注冊一個商家?guī)簦豢梢赃\營或維護多個商家?guī)簟嗰R遜vps是什么意思?亞馬遜官方要求,一個人只能在亞馬遜上申請注冊一個商家?guī)簦豢梢赃\營或維護多個商家?guī)簟H绻麃嗰R遜的程序優(yōu)化算法認為某幾個帳戶都是同一個人來操作,那么這幾個賬戶就會被亞馬遜評定為互相關聯(lián)。因此,開亞馬遜店鋪,有一個好的VPS,開店就會順暢許多。所以,...
閱讀 1524·2021-11-25 09:43
閱讀 4067·2021-11-15 11:37
閱讀 3199·2021-08-17 10:13
閱讀 3507·2019-08-30 14:16
閱讀 3538·2019-08-26 18:37
閱讀 2495·2019-08-26 11:56
閱讀 1135·2019-08-26 10:42
閱讀 613·2019-08-26 10:39