TypeScript'te yalnızca 2 sayısal indeks imzası olan sınırlamayı nasıl yapabilirim
Bir süre Google'da aradıktan sonra benim için doğru cevabı bulamıyorum.
Sadece 0 ve 1 sayısal anahtarlarına izin veren bir sayı indeksine sahip bir sınıf tanımlamak istiyorum.
Şu ana kadar elimde olan bu:
class TupleWrapperClass{
[values:number]
constructor(value1: number, value2: number) {
this[0] = value1;
this[1] = value2;
}
}
Fikir şu ki, bu sınıf bir sayısal demet [number,number] temsil ediyor ve sadece 2 sayı saklayabilir. Sorunum ise, 2'den fazla eleman eklemeye izin vermesi:
let t = new TupleWrapperClass(0,3);
console.log(t[0]); // Output: 0
console.log(t[1]); // Output: 3
console.log(t[2]); // Output: undefined
t[2] = 7
console.log(t[2]); // Output: 7
Bazı cevapları okudum, burada bir tür ve indeksleyici tanımlıyorlar, bu işe yarıyor gibi görünüyor
type Index = 0 | 1
type TupleWrapperType = { [k in Index]?: number }
AMA, bir tür kontrolü yapamıyorum:
let t: TuppleWrapperType = { 0: 2, 1: 5 };
if(typeof t === TuppleWrapperType){} // Fails.
Özel türler ve neden çalışma zamanında türlerini kontrol edemediğimiz hakkında çok şey okudum, bu yüzden bir tür kontrolü yapmama izin verdiği için özel bir sınıf oluşturmaya geçtim:
let t = new TupleWrapperClass(0,3);
if(t instanceof TuppleWrapperClass){} // All good
TuppleWrapperClass'ımı yalnızca 2 indeksle nasıl sınırlayabilirim?
Cevap #1
Peki ya bu, örnekleme yapmadan önce sınıfta türü belirt
class TupleWrapperClass{
0: number;
1: number;
constructor(value1: number, value2: number) {
this[0] = value1;
this[1] = value2;
}
}
let t = new TupleWrapperClass(0,3);
console.log(t[0]); // OK
console.log(t[1]); // OK
console.log(t[2]); // Type Error
