Можно ли указать, что класс реализует абстрактный класс после объявления? - PullRequest
0 голосов
/ 29 октября 2019

Я хотел бы объявить абстрактный класс и класс, не заявляя, что класс реализует абстрактный класс в том же файле.

abstract class ExampleAbstractClass {
    abstract exampleMethod(): string;
}

class ExampleClass {
    exampleMethod(): string { return 'test'; }
}


// I would like to specify that the class does implement the abstract class in another file
ExampleClass implements ExampleAbstractClass

Playground

Этот вид использования возможен в других языках, таких как Swift с протоколами.

1 Ответ

0 голосов
/ 29 октября 2019

Да, это возможно:

example-class.ts

export abstract class ExampleAbstractClass {
    abstract exampleMethod(): string;
}

export class ExampleClass {
    exampleMethod(): string { return 'test'; }
}

export interface ExampleClass extends ExampleAbstractClass {} // NOTICE: usage of interface!

example-class.test.ts

import { ExampleClass, ExampleAbstractClass } from "./example-class";

const a: ExampleAbstractClass = new ExampleClass(); // works!
console.log(a.exampleMethod());

Вам придется использовать interface вместе с class, поскольку объединение объявлений классов в TypeScript запрещено. Вы также можете дополнить модуль , который определяет и реализует ExampleClass в отдельных файлах, используя declare module "<path to implementation source file>" {}.

...