首页 > 解决方案 > 'string | 类型的参数 number' 不可分配给“number”类型的参数

问题描述

用示例方法修改问题到最后: -

我有一个如下所示的用于输入对象的界面。

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

由于某些要求,我必须在所有操作结束时为“优先级”属性分配一个“字符串”,然后再将其发送到后端。

因为我必须分配一个字符串,所以我尝试使用联合运算符:-

优先级:数字 | 细绳; 但是,无论我在哪里使用其他操作,考虑到这个数字,所有其他代码段也会给我带来以下错误:

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: IList[]) {
  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: IList) => {
        if (list.priority === id) {
          list.priority = updatedPriorities[index];
        }
      });
    });
  } else {
    Lists.forEach((list: IList) => (list.priority = "CURRENT"));
  }
}

标签: typescripttypescript-typingstypescript3.0

解决方案


解决此问题的一种方法是在将类型传递给只需要字符串或数字的函数之前断言/缩小类型:

if (typeof list.priority === 'number') {
  // list.priority's type inside these braces is only 'number'
}

还有其他方法可以断言变量的类型:https ://www.typescriptlang.org/docs/handbook/basic-types.html#type-assertions


推荐阅读