在另一个接口中使用Typescript接口的一个属性

在另一个接口中使用Typescript接口的一个属性,typescript,interface,Typescript,Interface,假设我有一个Typescript接口,如下所示 export interface IMyObj { id: string; type: 'AA' | 'AZ' | 'XY'; ... } 现在我需要另一个界面,它也有类型字段 export interface IMyOtherObj { ... type: 'AA' | 'AZ' | 'XY'; ... } 如您所见,我复制了类型的值。所以我的问题是,如何在我的IMyOtherObj接口中重用I

假设我有一个Typescript接口,如下所示

export interface IMyObj {
    id: string;
    type: 'AA' | 'AZ' | 'XY';
    ...
}
现在我需要另一个界面,它也有
类型
字段

export interface IMyOtherObj {
    ...
    type: 'AA' | 'AZ' | 'XY';
    ...
}
如您所见,我复制了
类型的值。所以我的问题是,如何在我的
IMyOtherObj
接口中重用
IMyObj.type
?我试过这个

export interface IMyOtherObj {
    ...
    type: IMyObj.type; // -> error
    ...
}

我想我已经很接近了,但到目前为止运气不好,有什么建议吗?

您可以使用扩展功能

所以你会

导出接口IMyObj{
id:字符串;
类型:“AA”|“AZ”|“XY”;
...
}
然后

导出接口IMyOtherObj扩展了IMyObj{
...
其他东西:字符串;
...
}

您可以使用扩展功能

所以你会

导出接口IMyObj{
id:字符串;
类型:“AA”|“AZ”|“XY”;
...
}
然后

导出接口IMyOtherObj扩展了IMyObj{
...
其他东西:字符串;
...
}

您可以创建一个仅包含类型属性定义的新接口,然后从其他接口中扩展:

export interface ITypedObj {
    type: 'AA' | 'AZ' | 'XY';
}

export interface IMyObj extends ITypedObj {
    id: string;
}

您可以创建一个只包含类型属性定义的新接口,然后从其他接口中扩展:

export interface ITypedObj {
    type: 'AA' | 'AZ' | 'XY';
}

export interface IMyObj extends ITypedObj {
    id: string;
}

为您的属性定义一个
类型,例如

enum MyEnum {
    Aa = "AA",
    Az = "AZ",
    Xy = "XY"
}
像这样使用它

export interface IMyObj {
    id: string;
    type: MyEnum;
}
为您的属性定义一个
类型
,例如

enum MyEnum {
    Aa = "AA",
    Az = "AZ",
    Xy = "XY"
}
像这样使用它

export interface IMyObj {
    id: string;
    type: MyEnum;
}
你有两个选择

1将字段类型的类型提取为它自己的类型,并在两个位置使用它

type ObjectType='AA'|'AZ'|'XY'
接口A{
类型:ObjectType;
}
接口B{
类型:ObjectType
}
或者,如果无法修改第一个接口,则可以使第二个接口扩展第一个接口的子类型

接口A{
类型:“AA”|“AZ”|“XY”;
}
接口B扩展了拾取{
}
您有两个选项

1将字段类型的类型提取为它自己的类型,并在两个位置使用它

type ObjectType='AA'|'AZ'|'XY'
接口A{
类型:ObjectType;
}
接口B{
类型:ObjectType
}
或者,如果无法修改第一个接口,则可以使第二个接口扩展第一个接口的子类型

接口A{
类型:“AA”|“AZ”|“XY”;
}
接口B扩展了拾取{
}

您的问题是TS类型系统没有
属性访问权限,但请更改类型定义中的一项内容:

type: IMyObj['type']

您的问题是TS类型系统没有
属性访问权限,但请更改类型定义中的一项内容:

type: IMyObj['type']

难道不可能仅仅将它们提取为一个类型吗?难道不可能仅仅将它们提取为一个类型吗?