我正在将此IDocumentFilingDto.ts文件写入。
import { DocumentOrigin } from "./IDocumentFilingDto";
// export const enum DocumentOrigin {
// Original,
// Kopie,
// OverenaKopie,
// DS,
// DSSKonverzi,
// Elektronicky,
// }
export interface IDocumentFilingDtoGen {
UniqueId?: any;
Title?: string;
DocumentId?: string;
Binder?: any;
CommunicationType?: any;
Origin?: DocumentOrigin;
CompanyId?: any;
DocumentCategoryId?: any;
DocumentTypeId?: any;
CompanyOriginal?: string;
SiteUrl?: string;
hasSubmitted?: boolean;
isModified?: boolean;
IsLocalOnly?: boolean;
}
字符串
而且它工作正常,我没有得到任何类型的错误。
现在我将注解掉本地DocumentOrigin接口。同时,我将在导入的DocumentOrigin中进行注解。
//import { DocumentOrigin } from "./IDocumentFilingDto";
export const enum DocumentOrigin {
Original,
Kopie,
OverenaKopie,
DS,
DSSKonverzi,
Elektronicky,
}
export interface IDocumentFilingDtoGen {
UniqueId?: any;
Title?: string;
DocumentId?: string;
Binder?: any;
CommunicationType?: any;
Origin?: DocumentOrigin;
CompanyId?: any;
DocumentCategoryId?: any;
DocumentTypeId?: any;
CompanyOriginal?: string;
SiteUrl?: string;
hasSubmitted?: boolean;
isModified?: boolean;
IsLocalOnly?: boolean;
}
型
当我这样做的时候,我不再使用导入的DocumentOrigin接口,而是开始使用本地DocumentOrigin接口。这是唯一的变化。
导入的DocumentOrigin接口与本地DocuemntOrigin接口相同。它们是相同的。但令人惊讶的是,一旦我开始使用本地DocumentOrigin接口,我就会得到这个错误。
[07:20:52]错误-键入脚本-源\Web部件\文档上载Web部件\组件\文档头\文档头.tsx(462,60):错误TS 2345:类型为“{唯一ID?:any;标题?:字符串;文档ID?:字符串;活页夹?:任意;通信类型?:any; Ori...“不能赋给”IDocumentFilingDtoGen“类型的参数。[07:20:52]错误-输入脚本-源\Web部件\文档上传Web部件\组件\Dtos\文档归档DtoGen.ts(28,12):错误TS 90010:类型“DocumentOrigin”不能分配给类型“DocumentOrigin.”有两个具有此名称的不同型别存在,但它们是不相关的。
为什么会这样?这说不通啊。这两个接口是相同的,但其中一个工作,而另一个不工作。为什么会这样?
附页:
有人在评论中要求我也提供IDocumentFilingDto.ts文件。在这儿呢。
export const enum DocumentOrigin {
Original,
Kopie,
OverenaKopie,
DS,
DSSKonverzi,
Elektronicky,
}
export interface IDocumentFilingDto {
UniqueId: any;
Title: string;
DocumentId: string;
Binder?: any;
CommunicationType: any;
Origin?: DocumentOrigin;
CompanyId: any;
DocumentCategoryId: any;
DocumentTypeId:any;
CompanyOriginal?: string;
SiteUrl?: string;
}
型
2条答案
按热度按时间ttygqcqt1#
该错误是因为TypeScript将本地DocumentOrigin视为与导入的DocumentOrigin不同的类型,即使它们是相同的。要解决这个问题,只需在IDocumentFilingDtoGen.ts中导入DocumentOrigin,并确保您只使用此目录中的枚举
无论你在哪里使用这个接口,也需要来自同一个地方的枚举
2fjabf4q2#
TypeScript枚举在几个方面是特殊的。其中一种方式是枚举成员与其实际值只有单向等价。例如,值为“foo”的枚举成员可以用在可以使用字符串的地方,但值为“foo”的变量(或另一个枚举的成员)不能用在需要第一个枚举的成员的地方。
如果需要使用枚举成员,则必须使用该特定枚举的成员,使用相同的值甚至是来自另一个枚举的相同成员是不够的。
举例来说:
字符串
TypeScriptPlayground
即使你创建了一个与初始枚举完全相同的成员和名称的新枚举,TypeScript也会识别出它们是不同的,并将它们视为不可互换的。
在这种情况下,enum也是一个const enum,这意味着当编译TypeScript时,enum的值将被替换为它们的实际值,因此就好像enum从未存在过一样。但是,TypeScript仍然要求通过枚举访问值来传递值。
如果您需要创建一个没有此限制的类似枚举的接口,您可以在普通JavaScript对象上使用
as const
Assert来创建与枚举几乎相同的东西。但是TypeScript不会为您创建枚举的其他部分,例如类型。这是我在工作中经常使用的一种模式:型
TypeScriptPlayground
这种方法有一些优点,也有一些缺点,但在大多数情况下,它的行为与使用
enum
关键字创建的枚举非常相似,因此知道它是一个选项至少是有用的。