если они находятся в одном файле, то проблем нет
// a.ts
interface A {
f(m: 'string'): string;
f(m: 'number'): number;
}
class A {
f(m: string): any {
// ...
}
}
const a = new A();
a.f('string'); // returns string
a.f('number'); // returns number
но если попытаться разместить их в разных файлах, и экспортировать интерфейс, то редактор будет ругаться на конфликт имён
// a.ts
interface A {
f(m: 'string'): string;
f(m: 'number'): number;
}
export default A;
// b.ts
import A from './a'; // Import declaration conflicts with local declaration of 'A'.
class A {
f(m: string): any {
// ...
}
}
я могу объявить класс с другим названием, который будет реализовывать интерфейс, но тогда мне придётся указывать тип явно
class B implements A {
f(m: string): any {
// ...
}
}
const a: A = new B();
a.f('string'); // returns string
a.f('number'); // returns number
есть ли у меня возможность именно слить интерфейс с классом?