[英]can't assign object value to object JavaScript
我正在嘗試將一個對象分配給另一個具有相同類型的對象。
所以,我有這個對象“語言”
export class Language {
languageDescription: string;
languageCode: string;
isDefault: boolean;
}
我用Language類型聲明了兩個對象selectedLanguage
和childSelectedLanguage
:
@State<LanguageSelectorStateModel>({
name: 'languageSelector',
defaults: {
languages: [],
selectedLanguage: null,
childSelectedLanguage: null
}
})*
填充 selectedLanguage 后(不再為 null),
@Action(UpdateSelectedLanguage)
@ImmutableContext()
updateSelectedLanguage({ getState, patchState }: StateContext<LanguageSelectorStateModel>, { languageCode }: UpdateSelectedLanguage) {
const state = getState();
const selectedLanguage = state.languages.find(language => language.languageCode === languageCode);
state.selectedLanguage = selectedLanguage;
patchState(state);
}
我試圖將此值的相同內容分配給 childSelectedLanguage。
childSelectedLanguage = selectedLanguage;
但是 childSlectedLanguage 仍然為 null,盡管 selectedLanguage 不是。
我也試過
@Action(InitializeChildrenSelectedLanguage)
initializeChildrenSelectedLanguage(
{ getState, patchState }: StateContext<LanguageSelectorStateModel>,
{ }: InitializeChildrenSelectedLanguage
) {
const state = getState();
Object.assign(state.childSelectedLanguage, state.selectedLanguage);
patchState(state);
}
但我也無法將對象分配給內容。
第一個問題:為什么我不能分配對象?
第二個問題:我該如何解決這個問題?
要從另一個對象創建對象,您可以使用這種函數
/**
* Update attributes of Class or object.
*
* @param origin - Original Object
* @param newValues - New Values
*/
export function updateFields<T>(origin: T, newValues: Partial<T>): T {
if (typeof origin !== 'object' || typeof newValues !== 'object') {
throw new Error('Arguments must be kind of Classe or Object');
}
const keys = (Object.keys(newValues) as unknown) as Array<keyof T>;
const result = origin; // Reassignment of Function Parameters is prohibited so we do a copy.
keys.forEach(function affectValues(key) {
result[key] = newValues[key] as never;
});
return result;
}
在您的代碼中,您可以執行此操作
state.selectedLanguage = updateFields<YourType>(state.selectedLanguage, selectedLanguage);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.