- 139
- 536
Подскажите пожалуйста, как мне сделать, чтобы аргумент k имел определенные поля интерфейса в зависимости от того, какой первый аргумент
Фактически он выводит значение, но на 15 строчке выходит ошибочка
Если использовать "// @ts-ignore", то все хорошо, но мне кажется, что где-то я ошибся
playground
Также можно использовать as, а тогда зачем k: K?
playground
Фактически он выводит значение, но на 15 строчке выходит ошибочка
Если использовать "// @ts-ignore", то все хорошо, но мне кажется, что где-то я ошибся
JavaScript:
interface MyInterface
{
CAT: {
CAT: string;
};
KITTY: {
KITTY: string;
};
}; // interface MyInterface
function Call< T extends keyof MyInterface, K extends MyInterface[T] >( t: T, k: K ) {
console.log( t ); // -> CAT
console.log( k ); // -> { CAT: '123' }
if ( t == "CAT" ) {
console.log( k.CAT ); // Property 'CAT' does not exist on type '{ CAT: string; } | { KITTY: string; }'.
// Property 'CAT' does not exist on type '{ KITTY: string; }'
// Аналогичная ошибка и с k?.CAT и k["CAT"]
}
}
Call( "CAT", {
CAT: "123"
});
Также можно использовать as, а тогда зачем k: K?
JavaScript:
if ( t == "CAT" ) {
let some = k as MyInterface["CAT"];
console.log( some.CAT ); // success
}
Последнее редактирование: