coord: (c:any) => number[]; //how to say it is an array of size 4
我可以像定义哈希映射一样定义接口
//this doesn't work
interface IArray{
[number]
}
并且还将最大长度限制为 4。
3 回答
7
这有点尴尬,但你可以这样做:
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
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
防止有人在索引之外的数组中使用索引并不是 C#可以做的事情。 e.g. 什么阻止你做:
var index = 123;
sizeFour[index];
甚至从服务器请求索引?
如此简短的回答“如果你坚持使用[],就没有一种预防性的方法来阻止这种情况”
你可以随时做
var bar = {
one : 'something',
two: 'somethingelse'
// etc.
}
3 回答
这有点尴尬,但你可以这样做:
您可以返回元组而不是数组:
防止有人在索引之外的数组中使用索引并不是 C#可以做的事情。 e.g. 什么阻止你做:
甚至从服务器请求索引?
如此简短的回答“如果你坚持使用
[]
,就没有一种预防性的方法来阻止这种情况”你可以随时做
然后只使用
.
i.e。bar.one