第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

類型腳本說交集屬性不存在

類型腳本說交集屬性不存在

qq_花開花謝_0 2022-09-23 16:36:44
我有一個(gè)變量,它從一個(gè)類型開始,但是在映射了幾次之后,應(yīng)該添加一個(gè)屬性,就像.但是,在倒數(shù)第四行中,打印屬性的附加項(xiàng)會(huì)給我一個(gè) TS 錯(cuò)誤,即使該屬性確實(shí)存在并且日志記錄的工作方式與我預(yù)期的一樣,打印三個(gè)屬性 、 和 。IPerson[]_idArray<IPerson & IWithId>_idfnamelname_id我想也許我需要以某種方式重新鑄造它,比如mapped = collection.map(mapperB) as Array<IPerson & IWithId>這不起作用,值得慶幸的是,對(duì)于imo應(yīng)該已經(jīng)根據(jù)函數(shù)的返回類型獲取其類型的變量,這樣做似乎非常冗長。mapperBlet _id = 0;interface IPerson {     fname: string;    lname: string;}interface IWithId {     _id: number;}function getNumber() {     return _id++}async function getData(json: string): Promise<IPerson[]> {     return JSON.parse(json)}function mapperA(entry: IPerson): IPerson {     return {        ...entry,        lname: entry.lname.toUpperCase()    }}function mapperB(entry: IPerson): IPerson & IWithId {     const _id = getNumber();    return {        ...entry,        _id    } }async function main() {    const json = `[{"fname":"john","lname":"doe"},{"fname":"jane","lname":"doe"}]`        const collection = await getData(json)    let mapped = collection.map(mapperA)    mapped = collection.map(mapperB)    console.log(mapped[0]._id); // Property '_id' does not exist on type 'IPerson'.    return mapped;}main().then(console.log)如果我使用另一個(gè)變量來保存第二個(gè)map函數(shù)的值,我可以讓它工作,即我很好奇為什么我不能使用我的原始變量?const mapped2 = collection.map(mapperB)為什么類型腳本不從顯式聲明的返回值中推斷出 的值?我可以讓它為我做這件事嗎?mappedmapperB類型腳本游樂場
查看完整描述

3 回答

?
慕的地8271018

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊

類型腳本從它的第一個(gè)賦值(初始化)中推斷出的類型,所以它是:mappedIPerson[]


In TypeScript, there are several places where type inference is used to provide

type information when there is no explicit type annotation. For example, in this

code


> let x = 3;


The type of the x variable is inferred to be number. This kind of inference takes place

when initializing variables and members, setting parameter default values, and 

determining function return types.

摘自TypeScript手冊(cè)中的“類型推斷”一章(我鏈接了它即將推出的2.0測試版),我建議閱讀這篇文章。


然后,第二個(gè)賦值不會(huì)擴(kuò)展定義,但也沒有錯(cuò)誤,因?yàn)閷?duì)象可以具有其他屬性。訪問 時(shí),您會(huì)收到一個(gè)錯(cuò)誤,因?yàn)?TypeScript 無法從最初推斷的類型中確定數(shù)組條目還包含屬性。_id_id


注意:強(qiáng)制轉(zhuǎn)換 給 TypeScript 沒有附加信息,所以結(jié)果是一樣的。mapped = collection.map(mapperB) as Array<IPerson & IWithId>


為了便于推理類型,我個(gè)人建議將轉(zhuǎn)換后的值分配給新變量(如您使用 .并選擇富有表現(xiàn)力的變量名稱(權(quán)衡變得冗長,但如果你保持函數(shù)復(fù)雜性足夠小,這種情況不應(yīng)該經(jīng)常發(fā)生):const mapped2 = collection.map(mapperB)


const filteredList = list.filter(...);

const filteredListWithIds = filteredList.map(...)

不直接相關(guān),但出現(xiàn)錯(cuò)誤:返回新數(shù)組。從 的值會(huì)立即丟失,因?yàn)樗成?= 集合。在基于您的真實(shí)代碼創(chuàng)建游樂場示例時(shí),也許是一個(gè)錯(cuò)誤?Array.prototype.map()mappedlet mapped = collection.map(mapperA)s being overwritten at the next line during


查看完整回答
反對(duì) 回復(fù) 2022-09-23
?
隔江千里

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超10個(gè)贊

這里的問題是在以下行:


let mapped = collection.map(mapperA) // here you declare mapped with the type IPerson[]

mapped = collection.map(mapperB) // here mapped already has a type and can't be changed

console.log(mapped[0]._id); // here you try to access a property IPerson doesn't have

您可以嘗試按照其他答案鏈接映射器或僅將兩個(gè)映射器強(qiáng)制為一個(gè)來解決此問題:


function mapper(entry: IPerson): IPerson & IWithId {

    const _id = getNumber();


    return {

        ...entry,

        _id,

        lname: entry.lname.toUpperCase()

    }

}


// later in your main function

let mapped = collection.map(mapper); // here mapped is declared as (IPerson & IWithId)[]

console.log(mapped[0]._id); // now you can access any IWithId property

希望這有幫助。


查看完整回答
反對(duì) 回復(fù) 2022-09-23
?
拉莫斯之舞

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超10個(gè)贊

是的,一旦賦值,就無法更改 typescript 中變量的類型。

如上面的示例中所述,您可以使用不同的變量。但是根據(jù)你的關(guān)注點(diǎn),你只想使用一個(gè)變量,你可以通過一個(gè)接一個(gè)地鏈接它們來調(diào)用兩個(gè)映射器。

類型腳本以非常好的方式支持函數(shù)調(diào)用的鏈接。因此,您可以將最后兩行代碼替換為單行代碼,如下所示:

let mapped = collection.map(mapperA).map(mapperB)

我希望您覺得這有幫助。您可以解決您的錯(cuò)誤。


查看完整回答
反對(duì) 回復(fù) 2022-09-23
  • 3 回答
  • 0 關(guān)注
  • 133 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)