HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

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





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.