typescript:固定大小数组的接口

bsr*_*bsr 13 typescript

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

coord: (c:any) => number[]; //how to say it is an array of size 4
Run Code Online (Sandbox Code Playgroud)

我可以像定义哈希映射一样定义接口

//this doesn't work
interface IArray{
  [number]
}
Run Code Online (Sandbox Code Playgroud)

并且还将最大长度限制为4.

R D*_*R D 16

你可以返回一个元组而不是一个数组:

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(','));
Run Code Online (Sandbox Code Playgroud)


Rya*_*ugh 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
Run Code Online (Sandbox Code Playgroud)