Tanda tangan indeks campuran naskah ketikan dengan properti yang diketahui
Katakanlah antarmuka memiliki beberapa properti yang dikenal dengan tipenya, dan dapat memiliki properti tambahan dengan kunci yang tidak dikenal dan beberapa tipe lainnya . sesuatu seperti:
interface Foo {
lenght: number;
[key: string]: string;
}
const foo : Foo = {
lenght: 1,
txt: "TXT",
};
Kesalahan TS: "Properti 'panjang' jenis 'nomor' tidak dapat ditetapkan ke jenis indeks string 'string'."
Bagaimana seharusnya antarmuka seperti itu diketik?
Jawaban
[key: string]: string;
ini mencegah Foo
antarmuka untuk tidak memiliki properti string. (Dalam nomor contoh Anda).
Apa yang dapat Anda lakukan adalah memisahkan properti yang dikenal dan tidak dikenal menjadi dua antarmuka dan menentukan jenis target Anda sebagai tipe gabungan seperti di bawah ini:
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
};
Tautan Playground
Lihat cuplikan ini yang menjelaskan maksudnya dengan baik
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;
}
Anda dapat memeriksa artikel ini untuk lebih jelasnya (saya mengambil cuplikan dari sana)
https://basarat.gitbook.io/typescript/type-system/index-signatures
Untuk elemen ini
Memiliki pengindeks string dan number
Ini bukan kasus penggunaan umum, tetapi compiler TypeScript tetap mendukungnya. Namun, ada batasan bahwa pengindeks string lebih ketat daripada pengindeks angka. Ini disengaja, misalnya untuk mengizinkan pengetikan seperti: