• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak przy użyciu TypeScript'u tworzyć zmienne typu jakiś interface + dowolna liczba dodatkowych pól ?

Object Storage Arubacloud
0 głosów
164 wizyt
pytanie zadane 29 stycznia 2021 w JavaScript przez Artek Stary wyjadacz (11,800 p.)

Rozważmy taką sytuację.

interface TestInterface{
    type1 : number,
    type2 : string,
}

let someVar:TestInterface = {type1:2, type2: 'something'};

Nic nadzwyczajnego do zmiennej przypisujemy odwołanie do obiektu, które ma dokładnie takie same właściwości jak zdefiniowane w interfejsie. Problem pojawia się gdy chcę zdefiniować taki typ który wymuszałby aby obiekt miał wszystko to co wymaga interface ale jednocześnie gdy podam wszystkie wymagane właściwości i dorzucę do obiektu coś co nie jest zefiniowane w interejsie to zgłosi mi błąd tak jak np. tu :

interface TestInterface{
    type1 : number,
    type2 : string,
}

let someVar:TestInterface = {type1:2, type2: 'something', type3:12};

Udało się mi zrobić coś takiego przy parametrze funkcji, ale chciałbym móc tworzyć zmienne w analogiczny sposób.

interface TestInterface{
    type1 : number,
    type2 : string,
}


function test2 <T extends TestInterface> (param:T):T{
    return {...param, abele : "bele"};
}

const x = test2({type1 : 2, type2 : 'kurakao', type3 : 'surprise this is not defined in the interface but i can add it'})

Jak coś analogicznego zapisać przy deklarowaniu zmiennej?

1 odpowiedź

+1 głos
odpowiedź 29 stycznia 2021 przez Tnifey Pasjonat (24,190 p.)

nie wiem czy o to chodzi, ale jeśli użyjesz TestInterface jako typu parametru param to powinno Ci podkreślić błąd 

function test2 (param: TestInterface): TestInterface {
    return { ...param, abele : "bele" };
}

jeśli chcesz rozszerzyć zakres tego interface to zrób typ generyczny który dodaje dane pola

interface TestInterface {
    type1 : number,
    type2 : string,
}

type GenericTestInterface <T> = TestInterface & T;

interface OtherInterface {
    type3: string;
}

type TestFunctionTypes= GenericTestInterface<OtherInterface>

function testFunction (param: TestFunctionTypes): TestFunctionTypes {}

 

komentarz 29 stycznia 2021 przez Artek Stary wyjadacz (11,800 p.)

nie wiem czy o to chodzi, ale jeśli użyjesz TestInterface jako typu parametru param to powinno Ci podkreślić błąd 

Nie o to chodziło :) 

jeśli chcesz rozszerzyć zakres tego interface to zrób typ generyczny który dodaje dane pola

Rozwiązanie które zaproponowałeś jest nie najgorsze. Boli mnie trochę, że w takiej sytuacji za każdym razem gdy będę chciał do obiektu dodać jakąś nową właściwość to będę musiał tworzyć nowy interface. 10 różnych zmiennych mających część wspólną TestInterface  i trzeba za każdym razem definiować nowy interface dla tej części co się zmieniła.

Podobne pytania

0 głosów
1 odpowiedź 458 wizyt
pytanie zadane 14 stycznia 2022 w JavaScript przez Oskar Szkurłat Bywalec (2,780 p.)
0 głosów
1 odpowiedź 270 wizyt
+1 głos
2 odpowiedzi 249 wizyt

92,576 zapytań

141,426 odpowiedzi

319,650 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...