টিপল পদ্ধতির:
এই সমাধানটি টিপলসের ভিত্তিতে একটি কঠোর ফিক্সডলেংথারি (ak.a. સીলেডআরে) ধরণের স্বাক্ষর সরবরাহ করে।
সিনট্যাক্স উদাহরণ:
let foo : FixedLengthArray<[string, string, string]>
এটি সীমাবদ্ধতার বাইরে সূচি অ্যাক্সেসকে বাধা দেয় বিবেচনা করে এটি সবচেয়ে নিরাপদ পদ্ধতি ।
বাস্তবায়ন :
type ArrayLengthMutationKeys = 'splice' | 'push' | 'pop' | 'shift' | 'unshift' | number
type ArrayItems<T extends Array<any>> = T extends Array<infer TItems> ? TItems : never
type FixedLengthArray<T extends any[]> =
Pick<T, Exclude<keyof T, ArrayLengthMutationKeys>>
& { [Symbol.iterator]: () => IterableIterator< ArrayItems<T> > }
পরীক্ষা:
var myFixedLengthArray: FixedLengthArray< [string, string, string]>
myFixedLengthArray = [ 'a', 'b', 'c' ]
myFixedLengthArray = [ 'a', 'b', 123 ]
myFixedLengthArray = [ 'a' ]
myFixedLengthArray = [ 'a', 'b' ]
myFixedLengthArray[1] = 'foo'
myFixedLengthArray[1000] = 'foo'
myFixedLengthArray.push('foo')
myFixedLengthArray.pop()
myFixedLengthArray.length = 123
var [ a ] = myFixedLengthArray
var [ a, b ] = myFixedLengthArray
var [ a, b, c ] = myFixedLengthArray
var [ a, b, c, d ] = myFixedLengthArray
(*) এই সমাধানটির কাজ করার জন্য noImplicitAny
টাইপস্ক্রিপ্ট কনফিগারেশন নির্দেশকে সক্ষম করার প্রয়োজন হয় (সাধারণত প্রস্তাবিত অনুশীলন)
অ্যারে (ইশ) পদ্ধতির:
এই দ্রবণটি Array
একটি অতিরিক্ত দ্বিতীয় প্যারামিটার (অ্যারে দৈর্ঘ্য) গ্রহণ করে, প্রকারের বৃদ্ধি হিসাবে কাজ করে । টিপল ভিত্তিক সমাধানের মতো কঠোর এবং নিরাপদ নয় ।
সিনট্যাক্স উদাহরণ:
let foo: FixedLengthArray<string, 3>
মনে রাখবেন যে এই পদ্ধতির আপনাকে ঘোষিত সীমানাগুলির বাইরে কোনও সূচি অ্যাক্সেস করা থেকে বিরত করবে না এবং এর জন্য একটি মান সেট করবে।
বাস্তবায়ন :
type ArrayLengthMutationKeys = 'splice' | 'push' | 'pop' | 'shift' | 'unshift'
type FixedLengthArray<T, L extends number, TObj = [T, ...Array<T>]> =
Pick<TObj, Exclude<keyof TObj, ArrayLengthMutationKeys>>
& {
readonly length: L
[ I : number ] : T
[Symbol.iterator]: () => IterableIterator<T>
}
পরীক্ষা:
var myFixedLengthArray: FixedLengthArray<string,3>
myFixedLengthArray = [ 'a', 'b', 'c' ]
myFixedLengthArray = [ 'a', 'b', 123 ]
myFixedLengthArray = [ 'a' ]
myFixedLengthArray = [ 'a', 'b' ]
myFixedLengthArray[1] = 'foo'
myFixedLengthArray[1000] = 'foo'
myFixedLengthArray.push('foo')
myFixedLengthArray.pop()
myFixedLengthArray.length = 123
var [ a ] = myFixedLengthArray
var [ a, b ] = myFixedLengthArray
var [ a, b, c ] = myFixedLengthArray
var [ a, b, c, d ] = myFixedLengthArray
arr
এটি শুরু করার পরেও আপনার সীমাহীন পরিমাণ "নম্বর" চাপতে পারেন।