首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TypeScript:“”string|number“”类型的参数不能赋给“”number“”类型的参数

TypeScript:“”string|number“”类型的参数不能赋给“”number“”类型的参数
EN

Stack Overflow用户
提问于 2020-03-06 17:19:47
回答 1查看 4.4K关注 0票数 1

我有一个如下所示的接口,用于输入对象。

代码语言:javascript
复制
export interface IList{
  name: string;
  age: number;
  option: number;
  quantity: number;
  priority: number;
}

由于一些要求,在发送到后端之前,我必须在所有操作的末尾为"priority“属性分配一个"string”。

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

代码语言:javascript
复制
priority : number | string;

但是,我使用其他操作的所有其他代码片段(将此作为一个数字考虑在内)也会抛出以下错误:

代码语言:javascript
复制
Argument of type 'string | number' is not assignable to parameter of type 'number'
  Type 'string' is not assignable to type 'number'.

我如何解决这个问题,并使用优先级作为字符串和数字来输入我的对象。

这里有一个条件,我使用"IList“接口作为类型,如果multiGroupHeader为真,则分配一个数字,否则我必须分配一个字符串:-

代码语言:javascript
复制
  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");
   }
  }
EN

回答 1

Stack Overflow用户

发布于 2020-03-06 17:40:05

按照您构建接口的方式,它不应该有任何类型错误,除非您没有遵守该接口的约定。

我假设你正在做这样的事情:

代码语言:javascript
复制
 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游乐场。不应该有任何变通的理由。

这是指向上面代码的链接:https://www.typescriptlang.org/play/#code/JYOwLgpgTgZghgYwgAgJIBlgGcwG8BQyyIcAthAFzI5SgDmA3IcnHZcQK6kBG0TRAewAOYYAJBUQXXlH7IAjhzjhgYAJ6TpfZkNoDa6zT2jIAPtTC0QjfAF98+BABs4WLMgAqEHMgJEiCOI0HAhg+gAUAJS+zP7+ThBgyE7YYKiQpFQYqcgAvDFxhf4k5FQARABSAgAWIMgAIgIQZQA0sUX+rOwATADMbR2FwqLiVN0Dg-6KyqKGyOPtg7piBhrzi-62ckT29kA

我建议您尝试一下,看看您面临的实际合同错误是什么。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60560928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档