Typescript: интерфейс для массива фиксированного размера
Есть ли способ в typescript определить массив фиксированного размера. скажем, например, в определении функции, мне нужно сказать
coord: (c:any) => number[]; //how to say it is an array of size 4
Можно ли определить интерфейс, как мы определяем хэш-карту
//this doesn't work
interface IArray{
[number]
}
а также ограничить максимальную длину 4.
Ответы
Ответ 1
Это неловко, но вы можете сделать это вот так:
interface SizeFour<T> {
0: T;
1: T;
2: T;
3: T;
}
function fn(): SizeFour<string> {
// Need to cast
return <any>['', '', '', ''];
}
var x = fn();
var a = x[0]; // a: string
var b = x[4]; // b: any; error if --noImplicitAny
Ответ 2
Вы можете вернуть tuple вместо массива:
type array_of_4 = [number, number, number, number];
var myFixedLengthArray :array_of_4 = [1,2,3,4];
// the tuple can be used as an array:
console.log(myFixedLengthArray.join(','));
Ответ 3
Предотвращение использования пользователем индекса в массиве вне границ - это не то, что может сделать даже С#. например что мешает вам делать:
var index = 123;
sizeFour[index];
Или даже запрашивать индекс с сервера?
Такой короткий ответ "нет декларативного способа предотвратить это, если вы настаиваете на использовании []
"
Вы всегда можете сделать
var bar = {
one : 'something',
two: 'somethingelse'
// etc.
}
а затем используйте .
i.e. bar.one