域:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
我的映射器:
export interface IDepartamentProps {
departament_name: string;
manager_id: string;
}
export class Departament extends AggregateRoot<IDepartamentProps> {
get DepartamentName(): string {
return this.props.departament_name;
}
get ManagerID(): string {
return this.props.manager_id;
}
private constructor(props: IDepartamentProps, id?: string) {
super(props, id);
}
public static create = async (
props: IDepartamentProps,
id?: string,
): Promise<Departament> => {
const guardedProps = [
{ argument: props.departament_name, argumentName: 'departament_name' },
{ argument: props.manager_id, argumentName: 'manager_id' },
];
const guardResult = Guard.againstNullOrUndefinedBulk(guardedProps);
if (!guardResult.succeeded) throw new Error(guardResult.message);
const departament = new Departament(props, id);
const idWasProvided = !!id;
if (!idWasProvided) {
departament.when(new LocationCreatedEvent(departament));
}
return departament;
};
}
但是由于某种原因,在检查值是否是我部门的实例时出现错误:
如果(部门的原始实例)返回raw;
我明白了:
部门'可以用任意类型实例化,该类型可以 与...无关
答案 0 :(得分:1)
我马上看到两个问题。
class DepartamentMapper<Departament>
采用名称为Department
的通用名称。该泛型的值与您的类Department
没有任何关系,但是您给它们指定了相同的名称。这就是为什么toDomain
方法出错的原因。
public toDomain = (raw: any): Departament => {
if (raw instanceof Departament) return raw;
};
调用raw instanceof Departament
时,您正在检查它是否是类 Department
的实例。但是您的返回类型Department
声明它是泛型 Department
的类型,
如果DepartmentMapper
仅映射Department
类对象,则它不应是通用类。将签名更改为export class DepartamentMapper implements IMapper<Departament>
。
如果<Department>
确实是泛型,那么您需要重新考虑如何验证其类型。
在同一函数中,您还有另一个错误,即返回类型。确认它是raw
后,您将返回Department
,但如果不是,则什么也不做。因此,您将收到错误2366“函数缺少结尾的return语句,并且返回类型不包含'undefined'”。
Department | undefined
Error
不是raw
,则抛出Department
true
时缩小输入的类型。在这种情况下,它有点简单,并且不依赖于实例,因此它可以是静态的。但是,这种方法看起来像这样:public isDepartment = (raw: any): raw is Departament => {
return raw instanceof Departament;
};