首页 文章

typescript:固定大小数组的接口

提问于
浏览
13

在 typescript 中有一种定义固定大小数组的方法。比方说,例如,在函数定义中,我需要能够说

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
    
  • 15

    您可以返回元组而不是数组:

    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. 
    }
    

    然后只使用. i.e。 bar.one

相关问题