| sizeoftrickster |
25.08.2024 16:47 |
Подскажите пожалуйста, как мне сделать, чтобы аргумент 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
|