gpt4 book ai didi

javascript - TS : missing typings for optional members in implementation of abstract class that implements interface

转载 作者:搜寻专家 更新时间:2023-10-30 21:48:28 27 4
gpt4 key购买 nike

Playground 代码 here

例子:

interface IFoo {
bar: number;
foo?: () => void;
}

abstract class AbstractFoo implements IFoo {
bar = 42;
};

因为 foo 是可选的,所以我不需要在 AbstractFoo 中实现它。但是,我可以在 AbstractFoo 的子项中实现它。因此,我希望以下代码不会编译,因为 foo 实现错误:

class ConcreteFoo1 extends AbstractFoo {
foo: string; // type for "foo" isn't checked
}

但是 TS 不对 IFoo 的可选成员做任何类型检查。除非我明确地实现它。然后编译器将按预期执行类型检查:

class ConcreteFoo2 extends AbstractFoo implements IFoo {
foo(arg: number) { } // error when implementing IFoo explicitly
}

所以我的问题是:为什么 typescript 不为具体类隐式实现接口(interface) IFoo?有什么方法可以强制执行此行为吗?

最佳答案

如果 AbstractFoo 实现 IFoo 的方式存在类型错误,则会导致错误。 IFooAbstractFoo 类型以及以任何其他方式扩展它的类型无关。它不会在其子项上强制执行 foo 属性类型,因为它们不知道 AbstractFoo 实现了 IFoo

这是 IFoo 影响子类的一种方式:

class ConcreteFoo extends AbstractFoo implements IFoo {...}

如果应该设置适当的继承,这意味着 IFoo 也应该是一个类:

abstract class AbstractFoo {
bar: number;
foo?: () => void;
}

abstract class BaseFoo extends AbstractFoo {
bar = 42;
};

class ConcreteFoo extends BaseFoo {...}

关于javascript - TS : missing typings for optional members in implementation of abstract class that implements interface,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50353316/

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