NodeJS определенные аргументы от первого параметра

sizeoftrickster

Известный
Автор темы
Проверенный
139
536
Подскажите пожалуйста, как мне сделать, чтобы аргумент k имел определенные поля интерфейса в зависимости от того, какой первый аргумент
Фактически он выводит значение, но на 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"
});
playground
Также можно использовать as, а тогда зачем k: K?
JavaScript:
if ( t == "CAT" ) {
    let some = k as MyInterface["CAT"];
    console.log( some.CAT ); // success
}
playground
 
Последнее редактирование: