Kude xD Mam problem w TypeScript xD

Da się zrobić interfejs dla tego obiektu?
https://pastebin.com/hZvaA6Sx

DOCZYTAJ DO KOŃCA:
Chodzi o to by ten interfejs walidował stringi w indexes na podstawie kluczy w schema? Chodzi o to, by w kolumnie indexes nie było innych wartosci niż klucze obiektu z sasiedniego obiektu schema.

Dane wlatują w funkcję, i nie wiem jakie kolumny będą z poziomu programisty. Więc wszelakie
index: 'id | 'server_id'

odpada, bo nie wiem czy to bedzie id czy dupa_id, czy server_id czy ujwieco_id

Chce to zrobic automatycznie,, by typescript sam to ogarnął poprzez kolumne schema #pytanie #programowanie #typescript
Klopsztanga userbar
Fausto

@Klopsztanga Ja tam w TypeScripta nie umiem, ale pierwsze co mi przyszło do głowy, to chatgpt : P

Klopsztanga

@Fausto no chatgpt się wykłada xD

def

da się, nawet łatwo

def

Masz, chat gpt, sobie zmień, żeby to lepiej wygladało

```

interface ServerSchema {

 id: string;

 parent_id: string;

 server_id: string;

 name: string;

}


interface SynchronizationSchema {

 sync_id: string;

 server_id: string;

 some_field: string;

}


interface ExampleObject {

 servers: {

  schema: ServerSchema;

  indexes: string[];

 };

 synchronization: {

  schema: SynchronizationSchema;

  indexes: string[];

 };

}


// Usage example:

const someExamples: ExampleObject = {

 servers: {

  schema: {

   id: '',

   parent_id: '',

   server_id: '',

   name: '',

  },

  indexes: ['id', 'parent_id', 'server_id', 'asd'],

 },

 synchronization: {

  schema: {

   sync_id: '',

   server_id: '',

   some_field: '',

  },

  indexes: ['server_id', 'sync_id'],

 },

};

```

Klopsztanga

@def no nie działa. Nie ma prawa działać. Takie podstawy to ogarniam, chodzi o coś bardziej skomplikowanego, by typ indexes był dynamiczny na podstawie schema, by zapobiec tworzenia indexu który nie istnieje

c1a4f94f-0b09-48ca-b518-1af47124304a
ataxbras

export interface someExamples {

servers: {

schema: {

id: string;

parent_id: string;

server_id: string;

name: string;

};

indexes: string[];

};

synchronization: {

schema: {

sync_id: string;

server_id: string;

some_field: string;

};

indexes: string[];

};

}


Oczywiście, musisz sobie sam poustawiać gdzie "?" , itp.

Klopsztanga

@ataxbras no nie zadziała.... Jak powyżej. Jak typescript ma wiedziec jakie wartosci powinny byc w indexes? Typujesz na stringa, więc wszystko tam mogę wpierdolić, każdy string

ataxbras

@Klopsztanga Tak jak @def wspomniał poniżej, dajesz union. Takie na wpół enumeratywne działanie ma jednak wady.


Ponadto, pamiętaj że TS nie jest runtime. Więc walidacja typem z zasady nie zadziała (z wyjątkami)

def

A dobra, doczytałem do końca pytanie, to musisz dodac jeszcze string literał union type

type Indexes = "id" | "parent_id" itd

Klopsztanga

@def no i właśnie to jest dupa, bo ten schemat wchodzi w konstruktorze, więc nie wiem jaki schemat będzie

def

@Klopsztanga to zostaje walidacja przez kod

Klopsztanga

Za pomocą funkcji jakoś mi się udaje dobrze to typować... hmm

5070a545-dec5-4109-bb3d-d705c360e7e5
motokate

@Klopsztanga Nie wiem, czy dobrze rozumiem problem. Typescript działa tylko statycznie, na etapie kompilacji - jeśli dopiero w runtime dowiadujesz się, co dostałeś, to TS tego nie ogarnie, bo już go tam nie ma.

Klopsztanga

@motokate chodzi mi o walidacje typów w trakcie kompilacji/pisania kodu.

Zaloguj się aby komentować