gpt4 book ai didi

angular - 类型 ClassB 中的属性 x 不可分配给基类型 ClassA 中的相同属性

转载 作者:行者123 更新时间:2023-12-05 04:32:56 24 4
gpt4 key购买 nike

我使用以下 Typescript 类:

  1. 我有一个抽象类

    export abstract class MyAbstractClass {
    .....
    }
  2. A类实现了抽象类的方法

    export ClassA extends MyAbstractClass {

    readonly MY_FIRST_CONTS = 'blaa';
    readonly MY_SECOND_CONTS = 'blaablaaa';

    ....
    }
  3. B 类扩展了 A 类,我想覆盖 MY_FIRST_CONTS 值。没有设置其他实现

    export ClassB extends ClassA {

    readonly MY_FIRST_CONTS = 'other blaa';
    readonly MY_SECOND_CONTS = 'other blaablaaa';

    ....
    }

我经常在 ClassB 中的 MY_FIRST_CONST 行收到以下错误:

   Property 'MY_FIRST_CONST' in type 'ClassB' is not assignable to the same property in base type 'ClassA'.

类型“other blaa”不能分配给类型“blaa”。

我不明白为什么会出现此错误,更不知道为什么 MY_SECOND_CONST 不会发生此错误。

有什么想法吗?非常感谢!

最佳答案

你有一个设计问题。技术问题来自这样一个事实,即您正在覆盖子类中的 readonly 属性,这没有意义。

要么你希望子类能够改变这个值,那么它不应该是readonly。或者你不希望子类能够改变这个值,那么你就不能在子类中声明一个不同的值。

但是,您可能还希望子类能够定义一个实例化后无法更改的值。这可以通过适当的构造函数或 getter 来完成:

使用构造函数:

export class ClassA extends MyAbstractClass {

readonly foo;

constructor(foo = 'foo') {
super();
this.foo = foo;
}
}

export class B extends ClassA {

constructor() {
super('bar')
}
}

setter/getter :

export class ClassA extends MyAbstractClass {
get foo() {
return 'foo';
}
}

export class B extends ClassA {
get foo() {
return 'bar';
}
}

关于angular - 类型 ClassB 中的属性 x 不可分配给基类型 ClassA 中的相同属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71559751/

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