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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Typescript 中的新對象更新 const 對象的所有屬性

使用 Typescript 中的新對象更新 const 對象的所有屬性

人到中年有點甜 2022-01-01 20:26:57
我想IMessage用具有相同類型的新對象更新類型的對象interface IMessage {  id: string,  text: string,  // and many more attributes}const message: IMessage = {  id: "_id",  text: "old text",  // and many more attributes}const newMessage: IMessage = {  id: "_id",  text: "new text"  // and many more attributes}我期待我的message更新后將具有與 完全相同的值newMessage,但我不能僅僅重新分配message對象,因為它message被聲明為const. 這是我到目前為止const updateMessage = (message: any, newMessage: typeof message): void => {    for (const attr in newMessage) {        if (attr !== "id" && newMessage.hasOwnProperty(attr)) {            message[attr] = newMessage[attr];        }    }};此功能正在運行。但是在這個函數(shù)中,我必須聲明(message: any, newMessage: typeof message),否則 Typescript 會拋出警告Element implicitly has an 'any' type because type 'IMessage' has no index signature。我怎樣才能讓這個函數(shù)只接受 type 的參數(shù)IMessage?
查看完整描述

2 回答

?
慕標(biāo)5832272

TA貢獻1966條經(jīng)驗 獲得超4個贊

你對使用有Object.assign()什么想法?它將所有自己的和可枚舉的屬性復(fù)制到它的第一個參數(shù)中,正如您所做的那樣。免除id這一點會有一點小問題,但您可以通過使用rest object destructring來解決這個問題。像這樣:


const updateMessage = (message: IMessage, newMessage: IMessage): void => {

    const { id, ...nm } = newMessage; // make nm from newMessage without id prop

    Object.assign(message, nm); // update message with nm

};

這應(yīng)該像您的原始updateMessage()函數(shù)一樣沒有類型錯誤。請注意,這不是特別類型安全,因為Object.assign()的類型允許任何參數(shù)。您可以進行自己的輸入,以確保后續(xù)參數(shù)不會添加任何意外屬性,如下所示:


const safeAssign: <T>(target: T, ...args: Partial<T>[]) => T = Object.assign;


const updateMessage = (message: IMessage, newMessage: IMessage): void => {

    const { id, ...nm } = newMessage;

    safeAssign(message, nm);

};

但它在運行時的任何一種方式都是一樣的。


查看完整回答
反對 回復(fù) 2022-01-01
?
慕慕森

TA貢獻1856條經(jīng)驗 獲得超17個贊

您可以為此使用 TS 通用類型。


function updateMessage <T>(message: T, newMessage: T): void {

    for (const attr in newMessage) {

        if (attr !== "id" && newMessage.hasOwnProperty(attr)) {

            message[attr] = newMessage[attr];

        }

    }

};

然后在調(diào)用函數(shù)時傳遞類型。


updateMessage<IMessage>(message, newMessage)


關(guān)于泛型的 TS 文檔:https : //www.typescriptlang.org/docs/handbook/generics.html


查看完整回答
反對 回復(fù) 2022-01-01
  • 2 回答
  • 0 關(guān)注
  • 271 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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