Typescript
Dieses Package nutzt den Typ FilterSetConfig
für Type-Hints. Der Typ ist Generisch aud erwartet mindestens einen Parameter. Im den folgenden Abschnitten werden beispiele Vorgestellt, wie diese genutzt werden können um verschiedene Verhalten abzubilden.
Data Parameter
Angenommen es existiert ein Model Category
:
interface Category {
id: number
name: string
}
Category
als Parameter zu übergeben bewirkt, dass nur Attribute des Interfaces in der Konfiguration erlaubt sind:
const config: FilterSetConfig<Category> = {
id: {
in: [1,2,3]
}
}
Nested Types
Nested-Types werden auch unterstützt:
interface Book {
id: number
category: Category
}
...
const config: FilterSetConfig<Book> = {
category: {
id:{
in: [1,2,3]
}
}
}
Key-Configuration
Mit einer Key-Konfiguration ist es möglich zu spezifizieren welche Filter für eine Attribut erlaubt sind.
interface CategoryKeyConfig {
name : 'exact' | 'startwith' | 'endswith'
}
...
const config: FilterSetConfig<Category, CategoryKeyConfig> = {
name: {
exact: 'Fantasy'
}
}
Diese Konfiguration erlaubt nur exact
, startwith
und endswith
für das Attribut name
TIP
Attribute, die in der Key-Konnfiguration nicht erwähnt werden, erlauben weiterhin alle Filter. Beachte, dass der value
-Filter nicht ausgeschlossen werden kann.
Nested Types
Für Nested-Types wie folgt aussehen:
interface BookKeyConfig {
category : {
name: 'exact' | 'startwith' | 'endswith'
}
}
Das ist zwar etwas redundant, aber ermöglicht es, unterschiedliche Verhaltensweisen für die Modelle zu definieren. Um den redundanten Teil zu entfernen, kann die Konfiguration auch folgendermaßen geschrieben werden:
interface BookKeyConfig {
category : CategoryKeyConfig
}
Custom Filter
Custom-Filter können wie folgt definiert werden:
interface CustomFilter {
notIn: any[]
}
WARNING
Es gibt noch keine generische Type-Hints für benutzerdefinierte Filter. Die Verwendung von any
als Typ erlaubt die Verwendung des Filters überall, lockert aber auch die Typisierung des übergebenen Wertes.:::
Um die Type-Hints zu aktivieren, muss der Filter einer Schlüsselkonfiguration hinzugefügt werden.
interface CategoryKeyConfig {
id: 'in' | 'notIn'
}
...
const config: FilterSetConfig<Category, CategoryKeyConfig, CustomFilter> = {
id: {
notIn: [1,2,3]
}
}