TypeScript: аргумент типа строка | число 'не может быть присвоено параметру типа' число '

У меня есть интерфейс, показанный ниже, для ввода объекта.

export interface IList{
  name: string;
  age: number;
  option: number;
  quantity: number;
  priority: number;
}

Из-за некоторых требований я должен назначить «строку» свойству «приоритет» в конце всех операций, прежде чем отправлять ее на бэкэнд.

Поскольку мне нужно присвоить строку, я попытался использовать оператор объединения: -

priority : number | string;

Но все остальные фрагменты кода, где бы я ни использовал другие операции, принимая это во внимание как число, также выдают мне следующую ошибку:

Argument of type 'string | number' is not assignable to parameter of type 'number'
  Type 'string' is not assignable to type 'number'.

Как мне обойти это и использовать приоритет как строку и число для ввода моего объекта.

Вот одно условие, при котором я использую интерфейс «IList» в качестве типа и присваиваю номер, если multiGroupHeader истинно, иначе мне нужно назначить строку: -

  public updatePriorities(Lists) {
    if(!this.multiGroupHeader){
    const priorities = Lists.map((list:IList) => list.priority);
    const uniquePriorities = [...new Set(priorities)];
    if (uniquePriorities.length === 1 && uniquePriorities[0] === 1) {
      return;
    }
    uniquePriorities.sort((priority1: number, priority2: number) => priority1 - priority2);
    const updatedPriorities = uniquePriorities.map((priority: number, index: number) => {
      return index + 1;
    });

    uniquePriorities.forEach((id: number, index: number) => {
      Lists.forEach((list: List) => {
        if (list.priority === id) {
          list.priority = updatedPriorities[index];
        }
      });
    });
   } else {
     Lists.forEach((list:List) => list.priority = "CURRENT");
   }
  }

person Veryon890    schedule 06.03.2020    source источник
comment
Проверьте его тип с помощью защиты типов прежде чем использовать?   -  person VLAZ    schedule 06.03.2020
comment
все остальные фрагменты кода должны иметь возможность получать number | string, а не только number   -  person Aleksey L.    schedule 06.03.2020
comment
Можете ли вы не преобразовать его в строку в момент отправки на серверную часть, но в противном случае рассматривать его как число?   -  person net.uk.sweet    schedule 06.03.2020


Ответы (1)


Как вы сконструировали свой интерфейс, он не должен иметь ошибок машинописного текста, если вы не соблюдаете договор этого интерфейса.

Я предполагаю, что вы делаете что-то вроде этого:

 interface IList{
     name: string;
     age: number;
     option: number;
     quantity: number;
     priority: number | string;
 }

 class Test {
  constructor() {
    let listItem: IList = {
        name: "John Doe",
        age: 23,
        option: 2,
        quantity: 2,
        priority: 2
     };
    }
 }

Это не должно приводить к ошибкам. Чтобы проверить ошибки типа этого, вы можете использовать TypeScript Playground. Не должно быть причин для обходного пути.

Это ссылка на код выше:

Я бы порекомендовал вам попробовать это и посмотреть, с какими фактическими ошибками контрактов вы сталкиваетесь.

person Darsshan    schedule 06.03.2020