摘要:比如篇首這東西,使用聲明聲明一個類型跟聲明一個對象般簡單,完全沒有學習成本。總結使用可以像聲明一個變量那樣聲明你的類型,且可以在運行時進行類型檢查。
JS是一門動態類型語言,在定義一個函數時,無法為其進行強類型指定,如:
function hello(name: string, content: string) { // 如果name或content不是string類型的話,就拋異常 }
如果沒有類型指定的話:
開發者常常不知道一個函數需要什么數據類型。
出現奇怪錯誤時,給debug造成麻煩。
其實業界已經有兩種解決辦法:
使用JSDoc對函數進行注釋
使用強類型語言編程,最后編譯成JS.
首先說第一種,JSDoc的語法規則可謂麻煩,注釋簡單類型時還稍微OK,如:
/** * @param string name the name of the person * @param string content the content to say */ function hello(name, content) { //... }
但如果我想對如下的數據結構做注釋呢?
javascript{ name: "jack", age: 18, address: { country: "china", city: "beijing" }, keywords: ["student", "programmer", "ios"] }
基本上沒幾個人能寫的對JSDoc的注釋,要對上述結構進行JSDoc,你需要:
艱難的Google它奇怪的語法。
寫出來還很丑。
最后其它開發者也看不懂。
參數傳錯也沒有錯誤提示。(WebStorm一定程度上可以進行類型推導)。
第二種,嗯,就不說了。
要想基本沒有學習成本的進行類型聲明和檢查,下面進入正題,使用duckie.
安裝對于node/browserify/webpack的用戶,直接:
npm install duckie var t = require("duckie"); // go!
對于瀏覽器用戶,可以直接使用https://github.com/ssnau/duckie/tree/master/build下已經編譯好的文件,也可用bower安裝。最后可以使用window.duckie。
入門回到篇首,如果想實現function hello(name:string, content:string)該如何實現呢?
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真正有效的地方在于,定義復雜的數據結構。
我們一個一個說起。
如果一個變量是枚舉類型,如何限定它的枚舉值呢?使用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如果一個變量是一個由數字組成的數組,該如何表示?
使用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數據結構,典型的變量如下: var person = { name: "jack", age: 18 }; duckie.objectOf({ name: String, age: Number }).assert(person) => true duckie({ name: String, age: Number }).assert(person) => true // 鴨子斷言,即只要求被斷言對象符合定義的 // 鍵值類型要求,而不要求精確匹配鍵數量 duckie({ name: String }).assert(person) => true duckie({ name: Number }).assert(person) => false如果一個變量是個object,里面有些值是數組呢?
以聲明變量的方式用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可以像聲明一個變量那樣聲明你的類型,且可以在運行時進行類型檢查。如有什么建議,歡迎提議。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/85553.html
摘要:在期間,華為正式發布云服務,聚焦物聯網基礎設施,構建產業生態黑土地,通過做大聯接利用云服務和智能做強產業物聯網,使能行業數字化。在HUAWEI CONNECT 2018期間,華為正式發布IoT云服務2.0,聚焦物聯網基礎設施,構建產業生態黑土地,通過做大聯接、利用云服務和AI智能做強產業物聯網,使能行業數字化。華為云核心網產品線總裁馬海旭發布IoT云服務2.0根據華為GIV(全球產業愿景)報...
摘要:顯然,相等判斷是基于數字比較的,而條件判斷是基于布爾值。嚴格相等嚴格相等的邏輯相對簡單粗暴,如果類型不同,就不考慮隱式轉換了,直接為假。 JavaScript 中大概有這幾種 類型: undefined null string boolean number object function 之所以在 類型 上加了雙引號,是因為嚴格來說,null 的類型是 object。但本文討論的主...
亞馬遜賣家專用vps有沒有?亞馬遜賣家最害怕的是什么,那就是被檢測到使用同一個IP地址運營多個店鋪,導致店鋪被封禁的情況,而云服務器可以完美解決這種問題,至于原因為何,且聽我滿滿道來!哪家亞馬遜云主機好用呢?只要IP純凈,服務器穩定,用于亞馬遜是很安全的,你可以百度搜索易探云,這家是專業的海外運營云服務器商家,同時推出美國電商云,保證IP純凈~搞亞馬遜運營店鋪,云服務器是絕佳選擇,而易探云優惠力度...
摘要:為促進本市民營企業做強做優,實現創新發展,月日下午,上海市民營企業總部頒證儀式在市政府舉行,優刻得作為上海市民營企業總部代表企業獲頒牌匾,成為上海市民營經濟發展的代表性企業之一。為促進本市民營企業做強做優,實現創新發展,4月15日下午,上海市民營企業總部頒證儀式在市政府舉行,UCloud優刻得作為上海市民營企業總部代表企業獲頒牌匾,成為上海市民營經濟發展的代表性企業之一。根據上海市委、市政府...
摘要:亞馬遜是什么意思亞馬遜是什么意思亞馬遜官方要求,一個人只能在亞馬遜上申請注冊一個商家帳戶,不可以運營或維護多個商家帳戶。亞馬遜vps是什么意思?亞馬遜官方要求,一個人只能在亞馬遜上申請注冊一個商家帳戶,不可以運營或維護多個商家帳戶。如果亞馬遜的程序優化算法認為某幾個帳戶都是同一個人來操作,那么這幾個賬戶就會被亞馬遜評定為互相關聯。因此,開亞馬遜店鋪,有一個好的VPS,開店就會順暢許多。所以,...
閱讀 1532·2021-11-25 09:43
閱讀 4081·2021-11-15 11:37
閱讀 3208·2021-08-17 10:13
閱讀 3516·2019-08-30 14:16
閱讀 3546·2019-08-26 18:37
閱讀 2502·2019-08-26 11:56
閱讀 1148·2019-08-26 10:42
閱讀 624·2019-08-26 10:39