gpt4 book ai didi

typescript - 为什么要求抽象类完全实现命名接口(interface)?

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

鉴于我有这个界面:

export class interface State {
default(): void;
}

还有这个抽象类:

export abstract class BaseState implements State {}

typescript 编译器告诉我“BaseState 错误地实现了接口(interface) State”——但这对我来说没有意义。如果一个抽象类实现了一个接口(interface),它不应该被强制实现它的所有方法,因为这也可以委托(delegate)给子类。

我知道我能做到

export abstract class BaseState implements State {
abstract default(): void;
}

但这绝对不是 DRY。那么,是否有充分的理由在 TypeScript 中采用这种行为?

最佳答案

因为 TypeScript 是结构类型的,所以您添加 implements 语句的唯一原因是收到警告,告知您忘记从接口(interface)实现方法。

如果您不想收到关于此的警告,您可以简单地省略 implements State 注释。

Example...我正在使用 Example 接口(interface)来确保传递给我的 usesExample 的对象是可接受的...我自始至终都获得了类型安全,但我没有不需要将 method 的抽象实现放在我的抽象类上。

我可以(可选地)将 Example 接口(interface)添加到 SubExample 如果我想在忘记添加某些内容时被告知...但是使用 的行usesExample 无论如何都会这样做。

interface Example {
method(): string;
}

abstract class BaseExample {
abstract foo(): string;
}

class SubExample extends BaseExample {
foo() {
return '';
}

method() {
return '';
}
}

function usesExample(example: Example) {
return example.method();
}

usesExample(new SubExample());

关于typescript - 为什么要求抽象类完全实现命名接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41722877/

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