当我的条件语句只返回所描述的类型时,为什么typescript会出错



我将类型定义为cretedEvents或字符串的数组,这会导致以下错误:

Type'(父级:User,参数:InputShapeFromFields<InputFieldMap<"InputObject"quot;没有创建事件"|(string|createdEvents[]([]"不可分配给类型"Resolver<用户,InputShapeFromFields<InputFieldMap<quot;InputObject"|"Arg">gt;,{currentUser:User;},createdEvents[]| null |未定义,"没有创建事件"|(string|createdEvents[]([]>'。键入";没有创建事件"|(string|createdEvents[]([]"不可分配给类型"MaybePromise<只读MaybePromise[]>|null|undefined'。键入";没有创建事件"不可分配给类型'MaybePromise<只读MaybePromise[]>|null|undefined'。

它似乎指的是我正在创建的字段不可分配给用户类型。

我试过

  1. 返回parent.createdEvents
  2. 如果未定义返回null、undefined和空数组

但这些都不起作用如果我在用户cretedEvents类型定义上添加任何选项,它会起作用,所以我假设这是问题的位置直接列在下面

export class User {
_id: ObjectId;
name: string;
email: string;
password?: string;
availableWeights?: number[];
createdEvents?: createdEvents[] | string;
signedUpEvents?: userSignUp[];

constructor(id: ObjectId, name: string, email: string, password?: string, availableWeights?: number[],
createdEvents?: createdEvents[] | string, signedUpEvents?: userSignUp[]) {
this._id = id;
this.name = name;
this.email = email;
this.password = password;
this.availableWeights = availableWeights;
this.createdEvents = createdEvents;
this.signedUpEvents = signedUpEvents;
}
}

就像我说的,如果我在createdEvents字段的末尾添加|any,错误就会消失

以下是我在解析时出错的地方:

createdEvents: t.field({
type: [createdEvents],
resolve: (parent, args, context) => {
if (parent.createdEvents == undefined || parent.createdEvents == null || parent.createdEvents.length == 0) {
return "No events created";
} else {
return parent.createdEvents;
}
}
}),

以下是我在整个代码中用作类型的类定义:

export class createdEvents {
_id: ObjectId;
eventName: string;
eventDate: Date;
eventDescription: string;
cost?: string;
eventLink?: string;
weights?: weightsForUserCreatedEvents[];
constructor(_id: ObjectId, eventName: string, eventDate: Date, eventDescription: string, cost?: string, eventLink?: string, weights?: weightsForUserCreatedEvents[]) {
this._id = _id;
this.eventName = eventName;
this.eventDate = eventDate;
this.eventDescription = eventDescription;
this.cost = cost;
this.eventLink = eventLink;
this.weights = weights;
}
}

解决方案由Michel Floyd提供

使用未定义而不是字符串

export class User {
_id: ObjectId;
name: string;
email: string;
password?: string;
availableWeights?: number[];
createdEvents?: createdEvents[] | undefined;
signedUpEvents?: userSignUp[];

constructor(id: ObjectId, name: string, email: string, password?: string, availableWeights?: number[],
createdEvents?: createdEvents[] | undefined, signedUpEvents?: userSignUp[]) {
this._id = id;
this.name = name;
this.email = email;
this.password = password;
this.availableWeights = availableWeights;
this.createdEvents = createdEvents;
this.signedUpEvents = signedUpEvents;
}
}
createdEvents: t.field({
type: [createdEvents],
resolve: (parent, args, context) => {
if (parent.createdEvents == undefined || parent.createdEvents == null || parent.createdEvents.length == 0) {
return undefined;
} else {
return parent.createdEvents;
}
}
}),

最新更新