0

development enviroment
・ react
・ typescript

state to update the member object in the state array.
I implemented is as follows.   However, I get the following error and cannot implement it well.

errormessage

Type'(IMemberLavel | {Language: IMember;}) []'cannot be assigned to type'IMemberLavel []'

interface IMemberLevel {
  member: IMember;
  level: ILevel;
}

interface IMember {
  id: number;
  name: string;
}

interface ILevel {
  id: number;
  name: string;
 }

interface ISearch {
  name: string;
  age: number;
  groups?: IGroups[];
  memberLavel: IMemberLevel[];
}

interface IState {
  searchState: ISearch;
  text: string,
  display: boolean
}

const Index: FC = () => {
  const [state, setState] = useState<IState>({
    searchState: initialSearch,
    text: '',
    display: boolean
  });

  const onClickMember = (member: IMember) => {
    setState({
      ...state,
      searchState: {
        ...state.searchState,
        memberLavel: [...state.searchState., {  member : member }],
     },
  });
  };

Postscript

const inithialMemberLavel: IMemberLevel = {
  member: { id: 0, name: '' },
  level: { id: 0, name: '' },
};

const initialSearch: ISearch = {
  name: '',
  age: 0,
  groups: [],
  memberLavel: inithialMemberLavel[]
}
2
  • This has some syntax errors. Can you fix them? Commented Oct 14, 2020 at 14:47
  • 1
    I fixed the above code. Commented Oct 14, 2020 at 15:16

1 Answer 1

1

The new member you're adding to memberLavel is missing level property, either add the property

setState({
  ...state,
  searchState: {
    ...state.searchState,
    memberLavel: [
      ...state.searchState.memberLavel,
      { member, level: { id: /* some number */, name: /* some name */ } },
    ],
  },
});

or set it as optional in IMemberLevel interface

interface IMemberLevel {
  member: IMember;
  level?: ILevel;
}
Sign up to request clarification or add additional context in comments.

6 Comments

thank you!!! I implemented it in the above way. However, the initial value was set to [] and it could not be set in detail.
I set the initial value as  memberLavel: inithialMemberLavel [],  but I got the error Parsing error: An element access expression should take an argument.eslint.
@TOYUU you're just putting the [] wrong, this way you'd initialize it with an array with 1 item memberLavel: [inithialMemberLavel]
thank you!! {member, level: {id: / * some number * /, name: / * some name * /}}, member has no value in the scope of the abbreviation property'member'. Declare a value or specify an initializer. I get a ts (18004) error
try putting back {member: member}
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.