输入'字符串| undefined' 不可分配给类型 'string'

时间:2021-01-30 16:50:22

标签: javascript typescript

我开始使用 TypeScript,但遇到以下问题:

我有一个更新数据库中记录的方法,定义如下:

class Category {
  update (data: ICategory & { id: string }): Promise<ICategory & { id: string }> {
    // Do Stuff
  }
}

interface ICategory {
  id?: string
  name: string,
  icon: string,
  iconColor: string
}

请注意,接口中的id字段是可选的,并且该方法要求id为字符串,问题出在:当我尝试使用上述接口调用此方法时,出现以下错误:< /p>

TS2345: Argument of type 'ICategory' is not assignable to parameter of type 'ICategory & { id: string; }'.
  Type 'ICategory' is not assignable to type '{ id: string; }'.
    Types of property 'id' are incompatible.
      Type 'string | undefined' is not assignable to type 'string'.
        Type 'undefined' is not assignable to type 'string'.

即使我检查 typeof obj.id === 'string' 我仍然有同样的错误。

我该如何解决这个问题?正如我所说,我现在开始使用 TypeScript,欢迎提出任何建议。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用 Type Guard

interface FuncData {
    id: string;
}

function test(args: FuncData) { }

interface PartialData {
    id?: string;
}

const data: PartialData = { id: 'test' };

function funcDataGuard(data: PartialData): data is FuncData {
    return data.id != null;
}

if (funcDataGuard(data)) {
    test(data);
}