Przekazanie w parametrze właściwości interfejsu

0

Cześć :D

Mam takie zagadnienie - mianowicie mam interfejs i metodę:

interface ISomeInterface{
  prop1?: string;
  prop2?: number;
}

function foo<T>(interfaceProp: string){
}

Interfejs nie wyróżnia się niczym szczególnym, jedyne co to ma wszystkie właściwości nullowalne. Natomiast funkcja powinna przyjmować w parametrze interfaceProp WYŁĄCZNIE stringi, które odpowiadają nazwom właściwości interfejsu, którego typ przekazujemy w T. Wydaje się, że to żaden rocket science ale odbiłem się od zadania. Kombinowałem coś z mapped types (https://www.typescriptlang.org/docs/handbook/2/mapped-types.html) ale jedyne co mi się udało zrobić to taki parametr:

function foo<T>(interfaceProp: {[Property in keyof T]}){
}

ale to przyjmuje obiekt w parametrze i nie rozwiązuje mojego problemu. Zależy mi na tym, by był to string i żeby intellisense podpowiadał wartości - zmieni się model i chcę żeby kompilacja się nie powiodła jak stringiem będzie coś co nie jest nazwą właściwości interfejsu.

Strasznie się na tym zaciąłem i za wszelkie uwagi serdecznie dzięki :D

Pozdrawiam,
Dawid.

3

Natomiast funkcja powinna przyjmować w parametrze interfaceProp WYŁĄCZNIE stringi, które odpowiadają nazwom właściwości interfejsu, którego typ przekazujemy w T.

function foo<T>(interfaceProp: keyof T) {
  //
}

foo<ISomeInterface>('prop1')

Można także uzyskać podobny efekt, ale bezpośrednio z obiektu

const example = {
  prop1: 'hello',
  prop2: 4,
};

foo<typeof example>('prop1');
0

Super, dzięki! Za bardzo zafiksowałem się na stringu i nie wpadłem na tego keyofa w tej formie.

0

Interfejs nie wyróżnia się niczym szczególnym, jedyne co to ma wszystkie właściwości nullowalne.

Nie jest to prawda. Właściwości są opcjonalne, a to nie znaczy "nullowalne". Oczywiście dopóki mówimy o strict mode, jedynym godnym człowieka.

1 użytkowników online, w tym zalogowanych: 0, gości: 1