2 回答

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);
};
但它在運行時的任何一種方式都是一樣的。

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
添加回答
舉報