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

TS中Array.reduce提示沒有與此調用匹配的重載解析

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

起因

一個feature開發(fā), 結果需求評審、工時預估, 簡直是事故級別的. 最后, 迫于無奈, 全組人都得上去救火...

今天, 幫忙改bug的時候, 發(fā)現(xiàn)新checkout下來的代碼, 還帶著新鮮的語法錯誤...簡直大無語.

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

排查過程

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

// 業(yè)務代碼不方便外流, 簡單寫了個demo, 問題原因相同
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后, 其實是可以運行的. 但如果裝了插件, 可以看到明顯的TS語法錯誤..
// 輸出值
// [
//   { count: 0 },
//   { count: 1 },
//   { count: 2 },
//   { count: 3 },
//   { count: 4 },
//   { count: 5 },
//   { count: 6 }
// ]

(pre, cur)=>{} 會提示沒有對應的重載類型. 原因不復雜, 就是類型不符合推導預期, 但為什么不符合預期, 還真沒仔細看過. 本著fixbug可以, 但不能一無所獲的思想, 查看了對應的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對類型的推導, 基本就是, 「參數(shù)類型」和「返回值類型」相同、且reduce前后, 只有一種類型, 那不用加「泛型」

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

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

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

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

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

吐槽

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

問題很直觀, 也不復雜. 但看log, 這語法問題已經存在2個月了, 真的是vscode沒裝插件么?

以上就是TS中Array.reduce提示沒有與此調用匹配的重載解析的詳細內容,更多關于TS Array.reduce重載匹配的資料請關注腳本之家其它相關文章!

相關文章

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

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

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

    初識SmartJS - AOP三劍客

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

    require.js使用方法的簡單代碼講解筆記

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

    移動設備web開發(fā)首選框架:zeptojs介紹

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

    FastAdmin表單驗證data-rule插件—Nice-validator的使用方法

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

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

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

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

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

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

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

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

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

    如何解決tsconfig.json配置不生效的問題

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

最新評論

息烽县| 淄博市| 阿拉善盟| 曲水县| 甘孜| 竹溪县| 龙里县| 龙游县| 衡山县| 醴陵市| 江阴市| 大田县| 齐齐哈尔市| 三穗县| 江安县| 和平县| 前郭尔| 陕西省| 莎车县| 祁连县| 罗江县| 柳州市| 巢湖市| 郑州市| 万年县| 海安县| 瑞丽市| 梁山县| 崇明县| 年辖:市辖区| 渝北区| 武清区| 丹寨县| 穆棱市| 东方市| 朝阳区| 施甸县| 鲁山县| 宜宾县| 霍林郭勒市| 鹿泉市|