欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

TypeScript 運(yùn)行時(shí)類型檢查補(bǔ)充工具

 更新時(shí)間:2020年09月28日 09:55:07   作者:否子戈  
這篇文章主要介紹了TypeScript 運(yùn)行時(shí)類型檢查補(bǔ)充工具,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

TypeScript是靜態(tài)類型系統(tǒng),在編譯時(shí)做類型檢查。一般而言,如果項(xiàng)目所用到的所有庫、模塊都是基于ts的,那么靜態(tài)類型已經(jīng)可以避免大部分編程層面的類型問題。不過,在一些場(chǎng)景下來,單純靜態(tài)類型是無法解決問題的,部分?jǐn)?shù)據(jù)是動(dòng)態(tài)傳入到系統(tǒng)中的,主要包含場(chǎng)景如下:

  • 第三方數(shù)據(jù)源(接口API、本地持久化存儲(chǔ)、postMessage等)
  • 第三方調(diào)用者傳參
  • 全局狀態(tài)變更

當(dāng)然,還有其他可能,總之,單純靠靜態(tài)類型檢查,無法解決運(yùn)行時(shí)類型問題。因此,我寫了tyshemo這個(gè)工具。它可以幫助我們完成運(yùn)行時(shí)的類型檢查。它暴露了很多接口,其中的Ty接口,很適合在js中作為ts的補(bǔ)充被使用,我們來看下。

import { Ty } from 'tyshemo'

@Ty.decorate.with([Number, Number])
class Some {
 constructor(a, b) {
  this.x = a + b
 }
 
 @Ty.decorate.with(String)
 name = 'calc'
 
 @Ty.decorate.with([Number], Number)
 plus(y) {
  return this.x + y
 }
}

const some = new Some(1, 3) // ok
const some2 = new Some('1', '3') // throw error

some.name = 'ooo' // ok
some.name = 123 // throw error

const z = some.plus(2) // ok
const z1 = some.plus('3') // throw error

我們可以通過 Ty.decorate.with() 作為裝飾器來限定一個(gè)類上屬性的值類型,方法的參數(shù)和返回值類型。

在正常的程序中,我們有的時(shí)候也需要對(duì)值進(jìn)行限定,但是由于js語言的特性,我們無法對(duì)基礎(chǔ)類型的值進(jìn)行監(jiān)聽,不過我們可以對(duì)object進(jìn)行監(jiān)聽。我們可以如下操作:

const o = process.env.NODE_ENV === 'production' ? {} : Ty.decorate({}).with({
 name: String,
 age: Number,
})

o.name = null // throw error
o.name = 'aaa' // ok

o.age = '12' // throw error
o.age = 12 // ok

通過 process.env.NODE_ENV === 'production' 來控制當(dāng)前環(huán)境,如果在正式環(huán)境,就不需要這個(gè)能力,畢竟我們?cè)跍y(cè)試環(huán)境已經(jīng)做過充分驗(yàn)證了。

要對(duì)來自API的數(shù)據(jù)進(jìn)行檢查,我們可以這樣操作。

function getData(url) {
 return fetch(url).then(res => res()).then((data) => {
  if (process.env.NODE_ENV !== 'production') {
   Ty.expect(data).to.be({
    name: String,
    age: Number,
   })
  }
  return data
 })
}

Ty 這個(gè)接口可以快速對(duì)數(shù)據(jù)進(jìn)行結(jié)構(gòu)化檢查。tyshemo還有很多其他方面的能力,可以在它的文檔中了解更多。

到此這篇關(guān)于TypeScript 運(yùn)行時(shí)類型檢查補(bǔ)充工具的文章就介紹到這了,更多相關(guān)TypeScript 運(yùn)行時(shí)類型檢查內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Bootstrap表單制作代碼

    Bootstrap表單制作代碼

    這篇文章主要為大家詳細(xì)介紹了BootStrap表單的制作代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • JS實(shí)現(xiàn)壓縮上傳圖片base64長(zhǎng)度功能

    JS實(shí)現(xiàn)壓縮上傳圖片base64長(zhǎng)度功能

    這篇文章主要介紹了js實(shí)現(xiàn)壓縮上傳圖片base64長(zhǎng)度功能,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • JavaScript使用focus()設(shè)置焦點(diǎn)失敗的解決方法

    JavaScript使用focus()設(shè)置焦點(diǎn)失敗的解決方法

    這篇文章主要介紹了JavaScript使用focus()設(shè)置焦點(diǎn)失敗的一個(gè)解決方法 ,需要的朋友可以參考下
    2014-09-09
  • JavaScript?中的?parseInt()?函數(shù)詳解

    JavaScript?中的?parseInt()?函數(shù)詳解

    parseInt函數(shù)將其第一個(gè)參數(shù)轉(zhuǎn)換為一個(gè)字符串,對(duì)該字符串進(jìn)行解析,然后返回一個(gè)整數(shù)或?NaN,這篇文章主要介紹了JavaScript?的?parseInt()?函數(shù),需要的朋友可以參考下
    2023-05-05
  • Echarts圖例組件的屬性與源代碼

    Echarts圖例組件的屬性與源代碼

    圖例組件展現(xiàn)了不同系列的標(biāo)記(symbol),顏色和名字,可以通過點(diǎn)擊圖例控制哪些系列不顯示,這篇文章主要給大家介紹了關(guān)于Echarts圖例組件的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • JS+CSS實(shí)現(xiàn)滑動(dòng)切換tab菜單效果

    JS+CSS實(shí)現(xiàn)滑動(dòng)切換tab菜單效果

    這篇文章主要介紹了JS+CSS實(shí)現(xiàn)滑動(dòng)切換tab菜單效果,涉及javascript鼠標(biāo)事件及頁面元素樣式的動(dòng)態(tài)切換效果實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-08-08
  • 微信小程序路由跳轉(zhuǎn)兩種方式示例解析

    微信小程序路由跳轉(zhuǎn)兩種方式示例解析

    這篇文章主要為大家介紹了微信小程序路由跳轉(zhuǎn)兩種方式示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • 詳解js中構(gòu)造流程圖的核心技術(shù)JsPlumb(2)

    詳解js中構(gòu)造流程圖的核心技術(shù)JsPlumb(2)

    這篇文章主要介紹了js中構(gòu)造流程圖的核心技術(shù)JsPlumb,jsPlumb是一個(gè)強(qiáng)大的JavaScript連線庫,它可以將html中的元素用箭頭、曲線、直線等連接起來,適用于開發(fā)Web上的圖表、建模工具等,需要的朋友可以參考下
    2015-12-12
  • 小程序?qū)崿F(xiàn)錨點(diǎn)滑動(dòng)效果

    小程序?qū)崿F(xiàn)錨點(diǎn)滑動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了小程序?qū)崿F(xiàn)錨點(diǎn)滑動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • js自定義Tab選項(xiàng)卡效果

    js自定義Tab選項(xiàng)卡效果

    這篇文章主要為大家詳細(xì)介紹了js自定義Tab選項(xiàng)卡效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06

最新評(píng)論