簡體   English   中英

無法將對象值分配給對象 JavaScript

[英]can't assign object value to object JavaScript

我正在嘗試將一個對象分配給另一個具有相同類型的對象。

所以,我有這個對象“語言”

export class Language {
  languageDescription: string;
  languageCode: string;
  isDefault: boolean;
}

我用Language類型聲明了兩個對象selectedLanguagechildSelectedLanguage

@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM