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 Ja tam w TypeScripta nie umiem, ale pierwsze co mi przyszło do głowy, to chatgpt : P
@Fausto no chatgpt się wykłada xD
da się, nawet łatwo
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'],
},
};
```
@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
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.
@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
@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)
@Klopsztanga ^^^
A dobra, doczytałem do końca pytanie, to musisz dodac jeszcze string literał union type
type Indexes = "id" | "parent_id" itd
@def no i właśnie to jest dupa, bo ten schemat wchodzi w konstruktorze, więc nie wiem jaki schemat będzie
@Klopsztanga to zostaje walidacja przez kod
Za pomocą funkcji jakoś mi się udaje dobrze to typować... hmm
@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.
@motokate chodzi mi o walidacje typów w trakcie kompilacji/pisania kodu.
Zaloguj się aby komentować