Показать сообщение отдельно

  #1  
Старый 25.08.2024, 16:47
sizeoftrickster
Участник форума
Регистрация: 28.07.2021
Сообщений: 138
С нами: 2524529

Репутация: 163
По умолчанию

Подскажите пожалуйста, как мне сделать, чтобы аргумент k имел определенные поля интерфейса в зависимости от того, какой первый аргумент

Фактически он выводит значение, но на 15 строчке выходит ошибочка

Если использовать "// @ts-ignore", то все хорошо, но мне кажется, что где-то я ошибся

JavaScript:





Код:
interface
MyInterface
{
CAT
:
{
CAT
:
string
;
}
;
KITTY
:
{
KITTY
:
string
;
}
;
}
;
// interface MyInterface
function
Call

(
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
 
Ответить с цитированием