哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

為什么你根本學(xué)不下去TypeScript?

馬哥Linux運(yùn)維 ? 來(lái)源:稀土掘金 ? 作者:一介4188 ? 2023-08-11 10:12 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

在群里看到一些問(wèn)題和言論:為什么你們這么喜歡“類型體操”?為什么我根本學(xué)不下去 TypeScript?我最討厭那些做類型體操的了;為什么我學(xué)了沒(méi)過(guò)多久馬上又忘了?

有感于這些問(wèn)題,我想從最簡(jiǎn)單的一個(gè)角度來(lái)切入介紹一下 TypeScript,并向大家介紹并不是只要是個(gè)類型運(yùn)算就是體操。并在文中介紹一種基本思想作為你使用類型系統(tǒng)的基本指引。

引子

我將從一個(gè)相對(duì)簡(jiǎn)單的 API 的設(shè)計(jì)過(guò)程中闡述關(guān)于類型的故事。在這里我們可以假設(shè)我們現(xiàn)在是一個(gè)工具的開(kāi)發(fā)者,然后我們需要設(shè)計(jì)一個(gè) API 用于從對(duì)象中拿取指定的一些 key 作為一個(gè)新的對(duì)象返回給外面使用。

垃圾 TypeScript

一個(gè)人說(shuō):我才不用什么破類型,我寫(xiě)代碼就是要沒(méi)有類型,我就是要隨心所欲的寫(xiě)。然后寫(xiě)下了這段代碼。

declarefunctionpick(target:any,...keys:any):any

他的用戶默默的寫(xiě)下了這段代碼:

pick(undefined,'a',1).b

寫(xiě)完運(yùn)行,發(fā)現(xiàn)問(wèn)題大條了,控制臺(tái)一堆報(bào)錯(cuò),接口數(shù)據(jù)也提交不上去了,怎么辦呢?

剛學(xué) TypeScript

一個(gè)人說(shuō):稍微檢查一下傳入類型就好了,別讓人給我亂傳參數(shù)就行。

declarefunctionpick(target:Record,...keys:string[]):unknown

很好,上面的問(wèn)題便不復(fù)存在了,API 也是基本可用的了。但是!當(dāng)對(duì)象復(fù)雜的時(shí)候,以及字段并不是短單詞長(zhǎng)度的時(shí)候就會(huì)發(fā)現(xiàn)了一個(gè)沒(méi)解決的問(wèn)題。

pick({abcdefghijkl:'123'},'abcdefghikjl')

從肉眼角度上,我們很難發(fā)現(xiàn)這前后的不一致,所以我們?yōu)槭裁匆屨{(diào)用方的用戶自己去 check 自己的字段有沒(méi)有寫(xiě)對(duì)呢?

不就 TypeScript

一個(gè)人說(shuō):這還不簡(jiǎn)單,用個(gè)泛型加 keyof 不就行了。

declarefunctionpick<
??T?extends?Record
>(target:T,...keys:(keyofT)[]):unknown

我們又進(jìn)一步解決的上面的問(wèn)題,但是!還是有著相似的問(wèn)題,雖然我們不用檢查 keys 是不是傳入的是一個(gè)正確的值了,但是我們實(shí)際上對(duì)返回的值也存在一個(gè)類似的問(wèn)題。

pick({abcdefghijkl:'123'},'abcdefghijkl').abcdefghikjl

一點(diǎn)小小的拓展

在這里我們看起來(lái)似乎是一個(gè)很簡(jiǎn)單的功能,但實(shí)際上蘊(yùn)含著一個(gè)比較重要的信息。

為什么我們之前的方式都拿不到用戶傳入進(jìn)來(lái)的類型信息呢?是有原因的,當(dāng)我們?cè)O(shè)計(jì)的 API 的時(shí)候,前面的角度是從,如何校驗(yàn)類型方向進(jìn)行的思考。

而這里是嘗試去通過(guò)約定好的一種規(guī)則,通過(guò) TypeScript 的隱式類型推斷獲得到傳入的類型,再通過(guò)約定的規(guī)則轉(zhuǎn)化出一種新的類型約束來(lái)對(duì)用戶的輸入進(jìn)行限制。

算算 TypeScript

一個(gè)人說(shuō):好辦,算出來(lái)一個(gè)新的類型就好了。

declarefunctionpick<
??T?extends?Record,
KeysextendskeyofT
>(target:T,...keys:Keys[]):{
[KinKeys]:T[K]
}

到這里已經(jīng)是對(duì)類型的作用有了基礎(chǔ)的了解了,能寫(xiě)出來(lái)符合開(kāi)發(fā)者所能接受的類型相對(duì)友好的代碼了。我們可以再來(lái)思考一些更特殊的情況:

//輸入了重復(fù)的key
pick({a:''},'a','a')

完美 TypeScript

到這里,我們便是初步開(kāi)始了類型“體操”。但是在本篇里,我們不去分析它。

exporttypeL2T=[L]extends[never]
?[]
:LextendsinferLItem
?[LItem?,...L2T,LAlias>]
:never

declarefunctionpick<
??T?extends?Record,
KeysextendsL2T
>(target:T,...keys:Keys):Pick

constx0=pick({a:'1',b:'2'},'a')
console.log(x0.a)
//@ts-expect-error
console.log(x0.b)

constx1=pick({a:'1',b:'2'},'a','a')
//^^^^^^^^
//TS2345:Argumentoftype'["a","a"]'isnotassignabletoparameteroftype'["a"?,"b"?]|["b"?,"a"?]'.
//Type'["a","a"]'isnotassignabletotype'["a"?,"b"?]'.
//Typeatposition1insourceisnotcompatiblewithtypeatposition1intarget.
//Type'"a"'isnotassignabletotype'"b"'.

一個(gè)相對(duì)來(lái)說(shuō)比較完美的 pick 函數(shù)便完成了。

總結(jié)

我們?cè)賮?lái)回到我們的標(biāo)題吧,從我對(duì)大多數(shù)人的觀察來(lái)說(shuō),很多的人開(kāi)始來(lái)使用 TypeScript 有幾種原因:

看到大佬們都在玩,所以自己也想來(lái)“玩”,然后為了過(guò)類型校驗(yàn)而去寫(xiě)

看到一些成熟的項(xiàng)目在使用 TypeScript ,想?yún)⑴c貢獻(xiàn),參與過(guò)程中為了讓類型通過(guò)而想辦法去解決類型報(bào)錯(cuò)

公司整體技術(shù)棧采用的是 TypeScript ,要用 TypeScript 進(jìn)行業(yè)務(wù)編寫(xiě),從而為了過(guò)類型檢查和 review 而去解決類型問(wèn)題

諸如此類的問(wèn)題還有很多,我將這種都劃分為「為了解決類型檢查的問(wèn)題」而進(jìn)行的類型編程,這也是大多數(shù)人為什么非常不適應(yīng) TypeScript,甚至不喜歡他的一個(gè)原因。這其實(shí)對(duì)學(xué)習(xí) TypeScript 并不是一個(gè)很好的思路,在這里我覺(jué)得我們需要站在設(shè)計(jì)者的角度去對(duì)類型系統(tǒng)進(jìn)行思考。我覺(jué)得有以下幾個(gè)角度:

類型檢查到位

類型提示友好

類型檢查嚴(yán)格

擴(kuò)展性十足

我們?nèi)绻驹谶@幾個(gè)角度對(duì)我們的 API 進(jìn)行設(shè)計(jì),我們可以發(fā)現(xiàn),開(kāi)發(fā)者能夠很輕松的將他們需要的代碼編寫(xiě)出來(lái),而盡量不用去翻閱文檔,查找 example。

希望通過(guò)我的這篇分享,大家能對(duì) TypeScript 多一些理解,并參與到生態(tài)中來(lái),守護(hù)我們的 JavaScript。

鏈接:https://juejin.cn/post/7248599585751515173





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA語(yǔ)言
    +關(guān)注

    關(guān)注

    0

    文章

    138

    瀏覽量

    21626
  • javascript
    +關(guān)注

    關(guān)注

    0

    文章

    526

    瀏覽量

    56499
  • java接口
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    1255

原文標(biāo)題:為什么你非常不適應(yīng) TypeScript

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    馬斯克出手!特斯拉聯(lián)合谷歌組建“電力聯(lián)盟”,解決AI電力需求

    投入使用。 而現(xiàn)在馬斯克也終于忍不下去了,當(dāng)?shù)貢r(shí)間3月11日,特斯拉、谷歌,以及包括Carrier(空調(diào)設(shè)備商)、Verrus(數(shù)據(jù)中心開(kāi)發(fā)商)在內(nèi)的五家電力設(shè)備、數(shù)據(jù)中心產(chǎn)業(yè)鏈公司宣布共同組建一個(gè)名為Utilize的產(chǎn)業(yè)聯(lián)盟。官網(wǎng)顯示,該聯(lián)盟的
    的頭像 發(fā)表于 03-16 13:47 ?6803次閱讀
    馬斯克出手!特斯拉聯(lián)合谷歌組建“電力聯(lián)盟”,解決AI電力需求

    的EMC瓶頸,不是經(jīng)驗(yàn)不夠,是體系不全

    EMC的EMC瓶頸,不是經(jīng)驗(yàn)不夠,是體系不全現(xiàn)在的狀態(tài),是不是這樣?產(chǎn)品送測(cè)前,心里完全沒(méi)底,不知道哪一項(xiàng)會(huì)掛傳導(dǎo)發(fā)射超標(biāo),換了十幾種電容電感,還是壓不下去靜電打幾下,系統(tǒng)重啟,
    的頭像 發(fā)表于 03-10 16:41 ?445次閱讀
    <b class='flag-5'>你</b>的EMC瓶頸,不是經(jīng)驗(yàn)不夠,是體系不全

    解析Si IGBT與SiC MOSFET的根本區(qū)別

    系統(tǒng)設(shè)計(jì)的關(guān)鍵。本文將從材料與結(jié)構(gòu)出發(fā),解析Si IGBT與SiC MOSFET的根本區(qū)別,探討其損耗機(jī)理與計(jì)算方法。
    的頭像 發(fā)表于 03-03 09:22 ?3513次閱讀
    解析Si IGBT與SiC MOSFET的<b class='flag-5'>根本</b>區(qū)別

    學(xué)單片機(jī)編程對(duì)數(shù)學(xué)英語(yǔ)有要求嗎

    嗎? 答:看你怎么學(xué),互聯(lián)網(wǎng)的好處就是什么資源都能搜集到,相反的也容易迷惑世人,資料太多眼花繚亂讓無(wú)從下手,今天,我特意花了1周時(shí)間精心整理出一套讓快速學(xué)會(huì)達(dá)到月薪過(guò)萬(wàn)的視頻教程資料,免費(fèi)分享給大家
    發(fā)表于 02-02 06:24

    這是誰(shuí)家部將,都做到內(nèi)置ECC了!

    有沒(méi)有試過(guò),設(shè)備突然宕機(jī),查了3天才發(fā)現(xiàn)是DDR 比特翻轉(zhuǎn) 搞的鬼;PCB尺寸卡得死死的,多一顆芯片都 沒(méi)地放 ;BOM成本要求一降再降, 外置ECC DDR芯片卻成了“減不下去的負(fù)擔(dān)” …… 但
    的頭像 發(fā)表于 12-18 16:05 ?308次閱讀
    這是誰(shuí)家部將,都做到內(nèi)置ECC了!

    開(kāi)源鴻蒙領(lǐng)學(xué)課堂——山東·泰安站圓滿舉辦

    2025年12月3日下午,開(kāi)源鴻蒙領(lǐng)學(xué)課堂(以下簡(jiǎn)稱"領(lǐng)學(xué)課堂")——山東泰安站于山東科技大學(xué)泰安校區(qū)圓滿舉辦。本次領(lǐng)學(xué)課堂以聚焦操作系統(tǒng)及軟件領(lǐng)域前沿,通過(guò)技術(shù)理論與實(shí)踐經(jīng)驗(yàn)分享,推動(dòng)開(kāi)源鴻蒙技術(shù)
    的頭像 發(fā)表于 12-05 19:13 ?3320次閱讀
    開(kāi)源鴻蒙領(lǐng)<b class='flag-5'>學(xué)</b>課堂——山東·泰安站圓滿舉辦

    ARM嵌入式這樣學(xué)

    ,排名第二、第三、第四等等從業(yè)人員都有高質(zhì)量的生活,而在排名榜單上光鮮亮麗的從業(yè)人員也未必過(guò)得大紅大紫。任何行業(yè)都與機(jī)遇、環(huán)境都有關(guān),再好的行業(yè)也有混不下去的人,再差的行業(yè)也有人悶聲賺大錢。另外,時(shí)間在變
    發(fā)表于 12-04 07:48

    電抗器選不對(duì),電費(fèi)為何居高不下?

    摘要電費(fèi)成本居高不下,往往是電能質(zhì)量差、功率因數(shù)低所致。本文從電抗器的基本原理出發(fā),結(jié)合行業(yè)標(biāo)準(zhǔn)與典型場(chǎng)景,說(shuō)明其如何在節(jié)能降耗中發(fā)揮作用。背景引入在多數(shù)工業(yè)企業(yè)中,由于感性負(fù)載居多,功率因數(shù)偏低
    的頭像 發(fā)表于 11-15 10:51 ?574次閱讀
    電抗器選不對(duì),電費(fèi)為何居高<b class='flag-5'>不下</b>?

    學(xué)單片機(jī)的誤區(qū)

    怎么使用,根本也記不住寄存器的用途。 單片機(jī)完成一個(gè)具體的功能涉及到哪些寄存器,都會(huì)有例子給出,有些單片機(jī),生產(chǎn)廠家也會(huì)給出相關(guān)的子程序,只需要調(diào)用就可以。 等你把這些基礎(chǔ)知識(shí)學(xué)完以后,幾乎可以完成
    發(fā)表于 11-14 07:46

    GD RV-START開(kāi)發(fā)板點(diǎn)燈程序下載時(shí)openocd出錯(cuò)

    /quickstart-doc-u-gd32vf103c_start_ide_quickstart.html 執(zhí)行到圖7-4,Run之后就進(jìn)行不下去了。前面的步驟都正常。 出錯(cuò)截圖如下,重新退出管理員運(yùn)行也是這樣。 另外附上openocd的配置 系統(tǒng)是win8.1 請(qǐng)大佬們
    發(fā)表于 11-05 12:40

    學(xué)linux呢?還是去研究學(xué)習(xí)單片機(jī)內(nèi)核,一些很底層的東西啥的呢?

    學(xué)生階段學(xué)技術(shù),最容易陷入的誤區(qū)就是 “把課本看懂了,就覺(jué)得自己會(huì)了”。不是不用功,是很多技術(shù)的門道藏在 “動(dòng)手實(shí)操” 里,沒(méi)真刀真槍做過(guò)項(xiàng)目,根本摸不到精髓。就拿嵌入式里的傳感器調(diào)試來(lái)說(shuō)吧,
    的頭像 發(fā)表于 10-22 11:16 ?401次閱讀
    <b class='flag-5'>學(xué)</b>linux呢?還是去研究學(xué)習(xí)單片機(jī)內(nèi)核,一些很底層的東西啥的呢?

    rt-thread studio仿真的時(shí)候控制臺(tái)不停打印亂碼,導(dǎo)致軟件卡死怎么解決?

    仿真才剛開(kāi)始,停到main函數(shù)入口,下面就一直打印亂碼,還不換行,底下進(jìn)度條已經(jīng)很短了,沒(méi)多久仿真就放不下去了,rt-thread studio軟件直接就卡死了
    發(fā)表于 09-17 07:05

    技術(shù)資訊 I PCB設(shè)計(jì)過(guò)程中盲/埋孔使用

    前言巴掌大的板子里密密麻麻的布線,傳統(tǒng)的通孔像早高峰上的立交橋的“大柱子”杵在那里,走線全憑運(yùn)氣,繞路、打結(jié)、信號(hào)互相干仗...改版改到懷疑人生,面積還死活壓不下去
    的頭像 發(fā)表于 07-25 16:16 ?3302次閱讀
    技術(shù)資訊 I PCB設(shè)計(jì)過(guò)程中盲/埋孔使用

    tscircuit - 電路開(kāi)發(fā)的 React 范式? 用TypeScript、React和 AI工具構(gòu)建電子產(chǎn)品

    TypeScript、React 和 AI 工具構(gòu)建電子產(chǎn)品。
    的頭像 發(fā)表于 04-30 18:18 ?1727次閱讀
    tscircuit - 電路開(kāi)發(fā)的 React 范式?   用<b class='flag-5'>TypeScript</b>、React和 AI工具構(gòu)建電子產(chǎn)品

    KaihongOS操作系統(tǒng):ArkTS語(yǔ)言基礎(chǔ)

    和特性都適用于ArkTS。ArkTS為TypeScript添加了一些特定的API和組件,以便更好地在KaihongOS上進(jìn)行開(kāi)發(fā)。 ArkTS基礎(chǔ) 類和接口 在ArkTS中,可以定義類和接口
    發(fā)表于 04-23 06:31
    纳雍县| 金坛市| 根河市| 尚义县| 潞西市| 广水市| 大石桥市| 高邑县| 洛扎县| 台前县| 台中市| 东源县| SHOW| 仙桃市| 泽普县| 沂水县| 通渭县| 齐齐哈尔市| 富阳市| 重庆市| 清水河县| 蒙自县| 依兰县| 弥渡县| 故城县| 肥城市| 上思县| 定边县| 邯郸县| 阜南县| 永川市| 宜兰市| 兴安盟| 池州市| 南乐县| 全州县| 南郑县| 石林| 锡林浩特市| 高唐县| 黄冈市|