【问题标题】:Building combined interface array构建组合接口阵列
【发布时间】:2019-01-03 09:38:48
【问题描述】:

我正在寻找构建 LDAP 样式(objectclass)数组接口结构的方法。 我已经尝试了多种不同接口的方法,但粗略的基本想法是这样的......

export enum ObjectClassEnum {
    top = 'top',
    posixGroup = 'posixGroup',
    groupOfNames = 'groupOfNames',
}

export interface ILdapObject {
    objectClass: ObjectClassEnum[];
}

export interface ILdapObjectTop extends ILdapObject {
    objectClass: ObjectClassEnum.top[];
}

export interface ILdapObjectPosixGroup extends ILdapObject {
    objectClass: Array<ObjectClassEnum.top | ObjectClassEnum.posixGroup>;
}

export interface ILdapObjectGroupOfNames extends ILdapObject {
    objectClass: Array<ObjectClassEnum.top | ObjectClassEnum.groupOfNames>;
}

还有对象...

const test: ILdapObjectPosixGroup & ILdapObjectGroupOfNames  =  {
    objectClass: [ObjectClassEnum.top, ObjectClassEnum.groupOfNames, ObjectClassEnum.posixGroup],
}

想法是对象现在应该结合两个接口的功能,但失败了,因为两者在接口中不共享相同的实际 objectClasses ...

编辑:我认为这实际上是我在这里面临的问题...... https://github.com/Microsoft/TypeScript/issues/16936

【问题讨论】:

  • 能否提供一些预期的使用示例?

标签: typescript interface


【解决方案1】:

首先要注意的是,当您编写 [SomeType] 时,这意味着该类型的一个元素的元组,如果您想要一个数组,则应该是 SomeType[]

另一件事是父接口应该比子接口更通用,这在你的代码中是相反的。

根据您的要求,这样的东西应该可以工作:

export enum ObjectClassEnum {
    top = 'top',
    posixGroup = 'posixGroup',
}

export interface ILdapObject {
    objectClass: ObjectClassEnum[]; 
}

export interface ILdapObjectTop extends ILdapObject {
    objectClass: ObjectClassEnum.top[]; 
}

export interface ILdapObjectPosixGroup extends ILdapObject {
    objectClass: (ObjectClassEnum.top | ObjectClassEnum.posixGroup)[]; 
}

const test: ILdapObjectPosixGroup = {
    objectClass: [ObjectClassEnum.top, ObjectClassEnum.posixGroup],
}

function processObject(obj: ILdapObject) {
    // ...
}

processObject(test)

【讨论】:

  • 我很乐意为您提供帮助。每当您在 StackOverflow 上回答您的问题时,请同时接受相关答案,以便系统将问题标记为已解决。
  • 如果我从 ILdapObject(即 posixGroup 和 groupOfNames)创建两个接口,我似乎无法将它们组合起来,因为与其他接口相比,另一个接口没有必需的 objectClasses ...也许我尝试将其构建为设置太复杂。基本上它应该像接口中的objectClass必须包含那些Enums键,但仍然可以包含其他ObjectClassEnum。
  • 请在原始问题中添加关于什么不起作用的信息,我可以看看
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多