Я впервые работаю с перегрузками в Typescript и столкнулся с некоторыми ошибками при определении их в interface
.
Я думаю, что правильно понимаю концепцию, потому что эти примеры компилируются без ошибок:
function test(): void;
function test(str: string): string;
// OK
function test(str?: string) {
if (typeof str === 'string') return str;
};
test(); // OK
test(''); // OK
class Test2 {
public test(): void;
public test(str: string): string;
// OK
public test(str?: string) {
if (typeof str === 'string') return str;
}
constructor() {
this.test(); // OK
this.test(''); // OK
}
}
Однако все эти броски либо:
Type '() => void' is not assignable to type '{ (): void; (str: string): string; }'.
Type '(str: string) => string' is not assignable to type '{ (): void; (str: string): string; }'.
interface Test {
test(): void;
test(str: string): string;
}
const test1: Test = {
test: () => {}, // ERROR
};
const test2: Test = {
test: (str: string) => str, // ERROR
};
class Test implements Test {
constructor() {
this.test = () => {}; // ERROR
this.test = (str: string) => ''; // ERROR
}
}
Я что-то не так делаю, или это ошибка в Typescript?
РЕДАКТИРОВАТЬ: Вот код на Typescript Playground