我开始使用 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,欢迎提出任何建议。
谢谢!
答案 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);
}