#typescript
#typescript
Вопрос:
Когда я пытаюсь определить перегрузку моей функции с частичной перегрузкой интерфейса, typescript выбирает неправильную перегрузку
interface Args {
_id: string;
name: string;
}
interface Result {
_id: string;
name: string;
}
function myFunction(arg: Args): Result;
function myFunction(arg: Partial<Args>): Partial<Result> {
return arg;
}
// Argument of type '{ _id: string; }' is not assignable to parameter of type 'Args'.
// Property 'name' is missing in type '{ _id: string; }' but required in type 'Args'
myFunction({ _id: 'aa' });
Попытка использовать myFunction({ _id: 'aa' } as Partial<Args>);
не помогает
Как я мог бы заставить это работать?
Ответ №1:
Последняя подпись является подписью реализации и не является частью общедоступных подписей. Итак, ваша функция действительно включена, имеет одну доступную сигнатуру function myFunction(arg: Args): Resu<
отсюда и ошибка.
function myFunction(arg: Args): Result;
function myFunction(arg: Partial<Args>): Partial<Result>
function myFunction(arg: Partial<Args>): Partial<Result> {
return arg;
}
myFunction({ _id: 'aa' });// ok now
Комментарии:
1. Я добавлю, что порядок перегрузок имеет значение, поскольку typescript выберет первое, что работает, поэтому в этом случае вы всегда должны помещать частичное последним, иначе другое никогда не будет использовано