TypeScript: аргумент типа 'строка | число 'не присваивается параметру типа' число ' - PullRequest
1 голос
/ 06 марта 2020

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

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 имеет значение true, иначе я должен назначить строку: -

  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");
   }
  }

1 Ответ

1 голос
/ 06 марта 2020

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

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

 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. Там не должно быть никаких оснований для обходного

1007 * Это ссылка на приведенный выше код:. https://www.typescriptlang.org/play/#code / JYOwLgpgTgZghgYwgAgJIBlgGcwG8BQyyIcAthAFzI5SgDmA3IcnHZcQK6kBG0TRAewAOYYAJBUQXXlH7IAjhzjhgYAJ6TpfZkNoDa6zT2jIAPtTC0QjfAF98 + BABs4WLMgAqEHMgJEiCOI0HAhg + gAUAJS + zP7 + ThBgyE7YYKiQpFQYqcgAvDFxhf4k5FQARABSAgAWIMgAIgIQZQA0sUX + rOwATADMbR2FwqLiVN0Dg-6KyqKGyOPtg7piBhrzi-62ckT29kA

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

...