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

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類(lèi)型重載相關(guān)的問(wèn)題, 簡(jiǎn)單記錄一下解決過(guò)程.

排查過(guò)程

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

// 業(yè)務(wù)代碼不方便外流, 簡(jiǎn)單寫(xiě)了個(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)的重載類(lèi)型. 原因不復(fù)雜, 就是類(lèi)型不符合推導(dǎo)預(yù)期, 但為什么不符合預(yù)期, 還真沒(méi)仔細(xì)看過(guò). 本著fixbug可以, 但不能一無(wú)所獲的思想, 查看了對(duì)應(yīng)的TS類(lèi)型聲明

// 3種reduce的類(lèi)型聲明
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ì)類(lèi)型的推導(dǎo), 基本就是, 「參數(shù)類(lèi)型」和「返回值類(lèi)型」相同、且reduce前后, 只有一種類(lèi)型, 那不用加「泛型」

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

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

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

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

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

吐槽

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

問(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)文章

  • layui中的layer彈出層自定義樣式更改背景

    layui中的layer彈出層自定義樣式更改背景

    layui中的layer彈出層有很多提示框,但是我們使用最多的應(yīng)該就幾種,layer.msg、layer.alert、layer.open、layer.load等。layer?有內(nèi)置的skin:layui-layer-lan,layui-layer-molv,可以直接使用。skin不僅允許你傳入layer內(nèi)置的樣式class名,可以自定義class名。
    2023-06-06
  • js庫(kù)Modernizr的介紹和使用

    js庫(kù)Modernizr的介紹和使用

    Modernizr是一個(gè)開(kāi)源的JS庫(kù),它使得那些基于訪客瀏覽器的不同(指對(duì)新標(biāo)準(zhǔn)支持性的差異)而開(kāi)發(fā)不同級(jí)別體驗(yàn)的設(shè)計(jì)師的工作變得更為簡(jiǎn)單
    2015-05-05
  • 鮮為人知的JavaScript5個(gè)JSON秘密功能

    鮮為人知的JavaScript5個(gè)JSON秘密功能

    這篇文章主要為大家介紹了鮮為人知的JavaScript中5個(gè)JSON秘密功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • 數(shù)據(jù)結(jié)構(gòu)TypeScript之鄰接表實(shí)現(xiàn)示例詳解

    數(shù)據(jù)結(jié)構(gòu)TypeScript之鄰接表實(shí)現(xiàn)示例詳解

    這篇文章主要為大家介紹了數(shù)據(jù)結(jié)構(gòu)TypeScript之鄰接表實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 使用JS?的download庫(kù)在瀏覽器直接下載文件

    使用JS?的download庫(kù)在瀏覽器直接下載文件

    一般情況下web項(xiàng)目的瀏覽器下載文件,都是使用form表單或者ajax向后端提交數(shù)據(jù),發(fā)送請(qǐng)求,后端文件的URL地址或者二進(jìn)制文件流。這篇文章主要介紹了使用JS?的download庫(kù)在瀏覽器直接下載文件。
    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
  • 聯(lián)合類(lèi)型Union?Types與交叉類(lèi)型Intersection?Types區(qū)別解析

    聯(lián)合類(lèi)型Union?Types與交叉類(lèi)型Intersection?Types區(qū)別解析

    這篇文章主要為大家介紹了聯(lián)合類(lèi)型Union?Types與交叉類(lèi)型Intersection?Types區(qū)別詳解
    2023-06-06
  • 前端輕量級(jí)MVC框架CanJS詳解

    前端輕量級(jí)MVC框架CanJS詳解

    你可能聽(tīng)說(shuō)了這個(gè)新MVC框架: CanJS。還有什么比用它來(lái)創(chuàng)建一個(gè)聯(lián)系人Web App更能深入了解它的辦法呢?當(dāng)看完這篇教程,你將全面了解用它的什么工具來(lái)創(chuàng)建你自己的Web App。
    2014-09-09
  • TypeScript前端上傳文件到MinIO示例詳解

    TypeScript前端上傳文件到MinIO示例詳解

    這篇文章主要為大家介紹了TypeScript前端上傳文件到MinIO示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • TypeScript 基本數(shù)據(jù)類(lèi)型實(shí)例詳解

    TypeScript 基本數(shù)據(jù)類(lèi)型實(shí)例詳解

    這篇文章主要為大家介紹了TypeScript 基本數(shù)據(jù)類(lèi)型實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01

最新評(píng)論