Следующая ограниченная универсальная функция ...
interface Alpha
{
member1: number,
member2: string,
}
interface Beta
{
member1: string,
member2: string,
}
function convert<Source extends Alpha, Target extends Beta>(s: Source): Target
{
return {
...s,
member1: s.member1.toString(),
};
}
const a: Alpha = {member1: 12, member2: 'hello'};
const b: Beta = convert(a);
... создает этот компилятор † error (где строка 16
- начало оператора return
):
main.ts:16:5 - error TS2322: Type 'Source & { member1: string; }'
is not assignable to type 'Target'
Конечно, если я выполняю работу компилятора и вручную создаю определенную версию универсальной функции, то она работает, как и ожидалось, без предупреждений или ошибок:
function convert(a: Alpha): Beta
{
return {
...a,
member1: a.member1.toString(),
};
}
Итак, мои вопросы:
- Почему приведенное выше определение не работает должным образом?
- И как выразить такое ограничение в другомпуть, чтобы он скомпилировал?
† Версия компилятора: 3.2.2