Не буду здесь приводить тонны своего кода, покажу на примере в чём проблема.
Есть какой-то класс (пусть будет Foo) с методом generateJson, который возвращает JSON типа FooGenerateJsonType:
@Component({})
export default class Foo {
protected generateJson(): FooGenerateJsonType {
return {
data {
test1: "TEST1"
}
}
}
}
interface FooGenerateJsonType {
data: FooGenerateJsonTypeData;
}
interface FooGenerateJsonTypeData {
test1: string;
}
У FooGenerateJsonType есть data которая имеет тип FooGenerateJsonTypeData с набором каких-то своих параметров.
Есть второй класс (пусть будет Bar), который наследуется от Foo:
@Component({})
export default class Bar extends Foo {
protected generateJson(): BarGenerateJsonType {
return {
data {
test2: "TEST2",
test3: "TEST3"
}
}
}
}
interface BarGenerateJsonType {
data: BarGenerateJsonTypeData;
}
interface BarGenerateJsonTypeData {
test2: string;
test3?: string;
}
Как видно, класс Bar переопределяет метод generateJson, но возвращает совершенно другой тип данных.
Скорее всего здесь уместно использовать generics. Подскажите, пожалуйста, как это грамотно сделать в моём случае? Ошибка примерно такая:
Property 'generateJson' in type 'Bar' is not assignable to the same
property in base type 'Foo'. Type '() => BarGenerateJsonType' is not
assignable to type '() => FooGenerateJsonType'.
Можно попробовать что-то вроде такого.
class Base<T> {
generateJson(): T {
return;
}
}
interface FooGenerateJsonType {
data: FooGenerateJsonTypeData;
}
interface FooGenerateJsonTypeData {
test1: string;
}
class Foo extends Base<FooGenerateJsonType> {
generateJson(): FooGenerateJsonType {
return {
data: {
test1: 'TEST1'
}
};
}
}
class Bar extends Base<BarGenerateJsonType> {
generateJson(): BarGenerateJsonType {
return {
data: {
test2: 'TEST2',
test3: 'TEST3'
}
};
}
}
interface BarGenerateJsonType {
data: BarGenerateJsonTypeData;
}
interface BarGenerateJsonTypeData {
test2: string;
test3?: string;
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости