代码之家  ›  专栏  ›  技术社区  ›  Joff

Typescript:如何使用相同的字段扩展接口

  •  -1
  • Joff  · 技术社区  · 6 年前

    我有两个typescript接口,它们都有一个 classes

    接口“Props”不能同时扩展类型{classes:Record;innerRef?:((instance:any)=>void)| RefObject | null | undefined;}和“typographrops”。类型{classes:Record;innerRef?的命名属性“classes”?:((instance:any)=>void)| RefObject | null | undefined;}'和'TypographyProps'不相同。

    我怎样才能扩展这些?我可以选择一个或另一个,或只是重命名其中一个?

    interface Props extends WithStyles<typeof styles>, TypographyProps {
       children: string;
    }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Get Off My Lawn    6 年前

    TypeScript允许一个名为 Mixins ,看起来你基本上是在做什么。这将允许您访问多个类。但是,必须在两个位置创建定义。如你所见 c 工具 a b 它必须同时定义所有类型,但是 c类 我们不需要将逻辑添加到函数中,只需要名称和返回类型。

    class a {
        public ax: number
    }
    
    class b {
        public bx: string
        public by(): void{
            console.log('by()')
        }
    }
    
    class c implements a, b { 
        public ax: number = 123
        public bx: string = 'hello'
        public by: () => void
    }
    

    applyMixins(c, [a, b])
    
    let myobj = new c()
    myobj.by()
    

    从文档中:

    这将遍历每个mixin的属性,并将它们复制到mixin的目标,用它们的实现填充备用属性。

    function applyMixins(derivedCtor: any, baseCtors: any[]) {
      baseCtors.forEach(baseCtor => {
        Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => {
          derivedCtor.prototype[name] = baseCtor.prototype[name]
        });
      });
    }