typescript 類型挑戰(zhàn)01 - IsOption

1.基礎(chǔ)

關(guān)于typescript類型編程的基礎(chǔ)看看官網(wǎng)的介紹基本上就夠了,這里就不贅述了,主要是記錄下個(gè)人學(xué)習(xí)的一些東西,實(shí)現(xiàn)的思路。

2.IsOption

實(shí)現(xiàn)可以判斷某個(gè)鍵值是否可選

type IsOptional<O, K extends keyof O> = Partial<Pick<O, K>> extends Pick<O, K> ? true: false
type test = {
  a?: string
  b: number
}
type res = IsOptional<test, 'a'> // true

3.思路

3.1如果用js實(shí)現(xiàn),將會(huì)是這樣

  const obj = {
    key1: 'optional',
    key2: 'require'
  }
  function isOptional(obj, key) {
    return obj[key] === 'optional'
  }
  isOptional(obj, 'key1')

關(guān)鍵的一步就是obj[key] === 'optional',想辦法判斷目標(biāo)和“可選標(biāo)記”是否相等

3.2獲取目標(biāo)我們可以用自帶的Pick

  type test = {
    a?: string
    b: number
  }
  type target = Pick<test, 'a'>

3.3獲取了目標(biāo)我們需要做比較,那么和什么東西作比較呢?

我們無(wú)法獲知屬性上的“可選標(biāo)記”,但是我們可以把目標(biāo)和另一個(gè)長(zhǎng)得和目標(biāo)一樣的類型(只不過(guò)屬性是可選的)作對(duì)比

  type test = {
    a?: string
    b: number
  }
  type target = Pick<test, 'a'>
  // 構(gòu)造可選
  type other = Partial<Pick<test, 'a'>>
  // 對(duì)比
  type isOptional = target extends other ? true : false
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容