Typescript 类只能实现对象类型或对象类型与静态已知成员的交集

Typescript 类只能实现对象类型或对象类型与静态已知成员的交集,typescript,Typescript,我有: 但这在createconva中给了我一个错误: class CreateYoutubeConversationDto { @ApiProperty({ required: true }) youtubeId: string; } class CreateDirectConversationDto { @ApiProperty({ required: false }) title: string; @ApiProperty({ required:

我有:

但这在
createconva
中给了我一个错误:

class CreateYoutubeConversationDto {
    @ApiProperty({ required: true })
    youtubeId: string;

}
class CreateDirectConversationDto {
    @ApiProperty({ required: false })
    title: string;

    @ApiProperty({ required: false })
    description: string;

    @ApiProperty({ required: true })
    createdByUserId: string;
}

type CreateConvo = typeof CreateDirectConversationDto | typeof CreateYoutubeConversationDto

export class CreateConversationDto implements CreateConvo { }

这是什么意思?我已经声明了所有类型。

让我们暂时改变一下
扩展的
实现。
你什么时候写信

A class can only implement an object type or intersection of object types with statically known members
它不仅是TS编译器,甚至是不太关心类型的JS引擎,都会对这个类的原型感到困惑

现在让我们回到
实现
,想象一下可以创建这样的类型。但让我们为层次结构添加另一个层次:

class CreateConversationDto extends CreateConvo {}
我们回到1号广场

您可以创建联合类型,但不能创建联合类


您对这种变体不满意的原因有哪些:

class CreateConversationDto implements CreateConvo {}
class X extends CreateConversationDto {} // even without types this class can't be created

这是因为
createconva
是一个联合体,对于如何实施联合体类型的实现是不明确的。您当然应该指定不同的类型,但这取决于您将
CreateConversationDto
想象为什么。它是否具有所有四个示例属性?还是仅从一种类型或另一种类型中选择属性?或者在实例化它之前您不知道?我希望它是以下两种之一:Direct/YouTubeSo如果它有tile,它就不应该有youtubeId
export class CreateYoutubeConversationDto { youtubeId: string }
export class CreateDirectConversationDto  { title: string; ... }
export type CreateConvo = CreateDirectConversationDto | CreateYoutubeConversationDto
...
function some_f(arg: CreateConvo) {
    if (arg instanceof CreateYoutubeConversationDto) return arg.youtubeId
    else return arg.title
}