PDA

Просмотр полной версии : определенные аргументы от первого параметра


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 (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL3BsYXkvPy Njb2RlL0pZT3dMZ3BnVGdaZ2hnWXdnQWdMSUU4Q1M1cnlRS0FH OTlsVGtCaEFRUUJVQXVaWXNwaW0rZ1p6Q2xBSE1CdUVzZ0Y5K1 RBTktacTFBSnIxR3pVdU1remtITGlENERTdy1NT1FCNlBjbENS WWlGQm13bThFZlBoZ0JYRUFqREFBOWlBcHdBTmw0QTh5YW1RSU FBOUlFQUFUTm1RQWF3aDBWeGcwTEJ4VEpBQWFaRkVnMElnSXFJ c1U2d0J0YWdCZFpBQStBQXBrTUhwcURPajZMSUJLQmsxa0JIYz JWeThJQURvdlYyNGFzR1FXM24xREFGb0tsbW9PcnBBZXZzSGht dWp4eVlOa1dZWjUrZ0J5QUVZQUpnQm1RK1JCRHVCRTBlUUFYa2 ZrQUNJcWFsZng5dmxTSlpXQmtNUmpGK2g4dGxOa0FBRktDdUFB TzBEQTZHUWh3K1YzQ3JnZ1VSQXJqR0lXQUhHUTdscTZIaHlNSU J4VW5CNGswRXlBQVB2dEZOSjJGVDFEVER2ME9yOXVUelNEdG9Y Q0VVaVVUUTBSaXNUanN2aXhrVEVhVER1U21jcFZOVHJvY3VXUW RvQUVFRUF2Q0NBQmhCQU53Z2dENFFRRE1JSUFPRUVBNGlENndE eUlNZ2pZQUpFRE5nRVlRUUJjSUhya0dia0lCQkVCaUFINVFUUV BURWl1OGFLOVNoMGJqZDhPUnZGNGFxSFBoazVLUVB2UlhtZHpx OGRCTWdB)

Также можно использовать as, а тогда зачем k: K?

JavaScript:






if
(
t
==
"CAT"
)
{
let
some
=
k
as
MyInterface
[
"CAT"
]
;
console
.
log
(
some
.
CAT
)
;
// success
}




playground (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL3BsYXkvPy Njb2RlL0pZT3dMZ3BnVGdaZ2hnWXdnQWdMSUU4Q1M1cnlRS0FH OTlsVGtCaEFRUUJVQXVaWXNwaW0rZ1p6Q2xBSE1CdUVzZ0Y5K1 RBTktacTFBSnIxR3pVdU1remtITGlENERTdy1NT1FCNlBjbENS WWlGQm13bThFZlBoZ0JYRUFqREFBOWlBcHdBTmw0QTh5YW1RSU FBOUlFQUFUTm1RQWF3aDBWeGcwTEJ4VEpBQWFaRkVnMElnSXFJ c1U2d0J0YWdCZFpBQStBQXBrTUhwcURPajZMSUJLQmsxa0JIYz JWeThJQURvdlYyNGFzR1FXM24xREFGb0tsbW9PcnBBZXZzSGht dWp4eVlOa1dZWjUrZ0J5QUVZQUpnQm1RK1JCRHVCRTBlUUFYa2 ZrQUNJcWFsZng5dmxTUHJHZWdCYkZBdlRad2ZMSkt4bUlydkdp dlVvaVg1TEZZRElZakZTdVlIOUQ1YktZcWV3SUpCc05nZEc0M2 ZEa2J4ZUdxd3o0Wk9Ta0Q3MFY1bmM2dkhRVElB)