gpt4 book ai didi

typescript - 一个类只能实现一个对象类型或对象类型与静态已知成员的交集

转载 作者:行者123 更新时间:2023-12-03 19:12:25 29 4
gpt4 key购买 nike

我有:

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 { }

但这给了我一个错误 CreateConvo :
A class can only implement an object type or intersection of object types with statically known members

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

最佳答案

让我们改变implements对于 extends一会儿。
你什么时候写

class CreateConversationDto extends CreateConvo {}

它不仅是 TS 编译器,即使是一个不太关心类型的 JS 引擎,也会对什么应该被视为此类的原型(prototype)感到困惑。

现在让我们回到 implements ,让我们假设可以创建这样的类型。但是让我们为层次结构添加另一个级别:
class CreateConversationDto implements CreateConvo {}
class X extends CreateConversationDto {} // even without types this class can't be created

我们又回到了 1 号广场。

您可以创建 联合类型 但不是 工会类(class) .

是否有任何特殊原因导致您对此变体不满意:
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
}

关于typescript - 一个类只能实现一个对象类型或对象类型与静态已知成员的交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61645533/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com