Firma indice della miscela di dattiloscritti con proprietà note
Supponiamo che l'interfaccia abbia alcune proprietà note con i loro tipi e può averne di aggiuntive con chiavi sconosciute e alcuni altri tipi . qualcosa di simile a:
interface Foo {
lenght: number;
[key: string]: string;
}
const foo : Foo = {
lenght: 1,
txt: "TXT",
};
Errore TS: "La proprietà" lunghezza "di tipo" numero "non è assegnabile al tipo di indice di stringa" stringa "."
Come dovrebbe essere digitata una tale interfaccia?
Risposte
[key: string]: string;
ciò impedisce Foo
all'interfaccia di non avere proprietà di stringa. (Nel tuo numero di esempio).
Quello che puoi fare è separare le proprietà note e sconosciute in due interfacce e definire il tuo tipo di destinazione come un tipo di unione come di seguito:
interface Foo {
lenght: number;
}
interface Bar {
[key: string]: string ;
}
type FooBar = Foo | Bar;
const foo : FooBar = {
lenght: 1, // its ok defined in foo
txt: "TXT", // string is ok
baz : 3 // error because its not string
};
Collegamento al parco giochi
Dai un'occhiata a questo frammento che spiega bene il punto
interface ArrStr {
[key: string]: string | number; // Must accommodate all members
[index: number]: string; // Can be a subset of string indexer
// Just an example member
length: number;
}
Puoi controllare questo articolo per maggiori dettagli (ho scelto lo snippet da lì)
https://basarat.gitbook.io/typescript/type-system/index-signatures
Per questo elemento
Avere sia indicizzatori di stringhe che di numeri
Questo non è un caso d'uso comune, ma il compilatore TypeScript lo supporta comunque. Tuttavia, ha la restrizione che l'indicizzatore di stringhe è più rigoroso dell'indicizzatore di numeri. Questo è intenzionale, ad esempio, per consentire la digitazione di cose come: