最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

TS中Array.reduce提示沒(méi)有與此調(diào)用匹配的重載解析

 更新時(shí)間:2023年06月19日 10:28:48   作者:wlAlter  
這篇文章主要為大家介紹了TS中Array.reduce提示沒(méi)有與此調(diào)用匹配的重載解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

起因

一個(gè)feature開(kāi)發(fā), 結(jié)果需求評(píng)審、工時(shí)預(yù)估, 簡(jiǎn)直是事故級(jí)別的. 最后, 迫于無(wú)奈, 全組人都得上去救火...

今天, 幫忙改bug的時(shí)候, 發(fā)現(xiàn)新checkout下來(lái)的代碼, 還帶著新鮮的語(yǔ)法錯(cuò)誤...簡(jiǎn)直大無(wú)語(yǔ).

翻了遍代碼, 發(fā)現(xiàn)很多地方都存在Array.reduce類型重載相關(guān)的問(wèn)題, 簡(jiǎn)單記錄一下解決過(guò)程.

排查過(guò)程

大家的vscode都不裝語(yǔ)法提示插件么? 代碼掛著紅線, 就扔代碼庫(kù)了??? 抽時(shí)間, 得把hook安排上了??

// 業(yè)務(wù)代碼不方便外流, 簡(jiǎn)單寫了個(gè)demo, 問(wèn)題原因相同
const nums = [1, 2, 3, 4, 5];
const sum = nums.reduce((pre, cur) => {
  return [...pre, { count: cur }];
}, []);
sum.push({ count: 6 });
console.log(sum);
// 這段代碼, 編譯成.js后, 其實(shí)是可以運(yùn)行的. 但如果裝了插件, 可以看到明顯的TS語(yǔ)法錯(cuò)誤..
// 輸出值
// [
//   { count: 0 },
//   { count: 1 },
//   { count: 2 },
//   { count: 3 },
//   { count: 4 },
//   { count: 5 },
//   { count: 6 }
// ]

(pre, cur)=>{} 會(huì)提示沒(méi)有對(duì)應(yīng)的重載類型. 原因不復(fù)雜, 就是類型不符合推導(dǎo)預(yù)期, 但為什么不符合預(yù)期, 還真沒(méi)仔細(xì)看過(guò). 本著fixbug可以, 但不能一無(wú)所獲的思想, 查看了對(duì)應(yīng)的TS類型聲明

// 3種reduce的類型聲明
reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): T;
reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue: T): T;
reduce<U>(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U;

很明顯, reduce對(duì)類型的推導(dǎo), 基本就是, 「參數(shù)類型」和「返回值類型」相同、且reduce前后, 只有一種類型, 那不用加「泛型」

但是, 如果出現(xiàn)1種以上的類型, 且preValue與initValue、returnType類型不同, 就必須顯式標(biāo)注類型.

案例中, pre的類型為never[], cur的類型是number, 而reduce的返回值類型是Array<{ count: number }>. 根據(jù)之前推導(dǎo)的結(jié)論, 出現(xiàn)3種類型, 且pre與cur、return值類型不同, 必須顯式聲明類型.

根據(jù)TS的類型聲明, 有2種可用的解決方法:

  • 給initValue增加類型斷言, [] as Array<{ count: number }>.
  • 在reduce處, 聲明泛型類型nums.reduce<Array<{ count: number }>>

核心解決思路: 減少TSC推導(dǎo)類型的種類, 促使其符合已存在的類型定義.

吐槽

只要思想不滑坡, 辦法總比困難多

問(wèn)題很直觀, 也不復(fù)雜. 但看log, 這語(yǔ)法問(wèn)題已經(jīng)存在2個(gè)月了, 真的是vscode沒(méi)裝插件么?

以上就是TS中Array.reduce提示沒(méi)有與此調(diào)用匹配的重載解析的詳細(xì)內(nèi)容,更多關(guān)于TS Array.reduce重載匹配的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • typescript封裝消息提示框插件ew-message使用實(shí)戰(zhàn)

    typescript封裝消息提示框插件ew-message使用實(shí)戰(zhàn)

    這篇文章主要為大家介紹了typescript封裝消息提示框插件ew-message使用實(shí)戰(zhàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • 初識(shí)SmartJS - AOP三劍客

    初識(shí)SmartJS - AOP三劍客

    隔了好久才終于又發(fā)布了一點(diǎn)東西,SmartJS是最近才開(kāi)始搞的一個(gè)開(kāi)源js庫(kù),目的是做一些比較有特點(diǎn)的事情(smartjs暫時(shí)也是依賴于jquery)。
    2014-06-06
  • require.js使用方法的簡(jiǎn)單代碼講解筆記

    require.js使用方法的簡(jiǎn)單代碼講解筆記

    頁(yè)面需要加載多個(gè)js文件時(shí),加載時(shí)瀏覽器會(huì)停止網(wǎng)頁(yè)渲染,加載文件越多,網(wǎng)頁(yè)失去響應(yīng)的時(shí)間就會(huì)越長(zhǎng);由于js文件之間存在依賴關(guān)系,必須嚴(yán)格保證加載順序,當(dāng)依賴關(guān)系很復(fù)雜的時(shí)候,代碼的編寫和維護(hù)都會(huì)變得困難。這種情況下require.js插件應(yīng)運(yùn)而生。
    2022-12-12
  • 移動(dòng)設(shè)備web開(kāi)發(fā)首選框架:zeptojs介紹

    移動(dòng)設(shè)備web開(kāi)發(fā)首選框架:zeptojs介紹

    這篇文章主要介紹了移動(dòng)設(shè)備web開(kāi)發(fā)首選框架:zeptojs介紹,他兼容jquery的API,所以學(xué)起來(lái)或用起來(lái)并不吃力,需要的朋友可以參考下
    2015-01-01
  • FastAdmin表單驗(yàn)證data-rule插件—Nice-validator的使用方法

    FastAdmin表單驗(yàn)證data-rule插件—Nice-validator的使用方法

    FastAdmin的表單驗(yàn)證data-rule非常方便,也很炫酷,采用的Nice-validator是一款非常強(qiáng)大的表單驗(yàn)證插件,通過(guò)簡(jiǎn)單在元素上配置規(guī)則,即可達(dá)到驗(yàn)證的效果,怎么使用Nice-validator插件呢
    2023-09-09
  • TypeScript?5.0?正式發(fā)布及使用指南詳解

    TypeScript?5.0?正式發(fā)布及使用指南詳解

    這篇文章主要為大家介紹了TypeScript?5.0?正式發(fā)布及使用指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • 自動(dòng)生成typescript類型聲明工具實(shí)現(xiàn)詳解

    自動(dòng)生成typescript類型聲明工具實(shí)現(xiàn)詳解

    這篇文章主要為大家介紹了自動(dòng)生成typescript類型聲明工具實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • TypeScript快速上手—html中使用ts的兩種方法

    TypeScript快速上手—html中使用ts的兩種方法

    TypeScript使用命令行編譯器tsc或其他工具手動(dòng)執(zhí)行編譯,在html使用s時(shí)編譯為JavaScript,那么有沒(méi)有辦法簡(jiǎn)化過(guò)程,不編譯直接使用,本文介紹html中使用TypeScript的兩種方法
    2024-07-07
  • TypeScript類型實(shí)現(xiàn)加減乘除詳解

    TypeScript類型實(shí)現(xiàn)加減乘除詳解

    這篇文章主要為大家介紹了TypeScript類型實(shí)現(xiàn)加減乘除示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 如何解決tsconfig.json配置不生效的問(wèn)題

    如何解決tsconfig.json配置不生效的問(wèn)題

    這篇文章主要介紹了如何解決tsconfig.json配置不生效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-05-05

最新評(píng)論

炉霍县| 富锦市| 怀化市| 泸州市| 开原市| 武陟县| 苗栗县| 砀山县| 江山市| 温宿县| 肇州县| 舞阳县| 沈阳市| 砀山县| 太湖县| 宁夏| 阳曲县| 关岭| 犍为县| 公安县| 舞钢市| 满洲里市| 西平县| 南通市| 如东县| 西和县| 东安县| 扶绥县| 吴桥县| 蚌埠市| 沁水县| 黎城县| 石渠县| 高清| 海宁市| 琼结县| 遂平县| 陵水| 霍林郭勒市| 佛教| 舒城县|