Rob*_*cks 22 javascript types typescript
在TypeScript中,Array和之间有什么区别any[]?Array是否引用动态大小的数组(当然是在编译时),并any[]引用作为参数传递并由编译器输入类型的静态大小的数组?因为目前我有以下功能:
mergeArrays(arr1 : Array, arr2 : Array);
Run Code Online (Sandbox Code Playgroud)
使用静态数据调用此函数时,TypeScript使用类型化数组(type[]).
mergeArrays([true, false], [1, 2]);
// bool[] number[]
Run Code Online (Sandbox Code Playgroud)
那么2之间是否存在编译时差异?any[]我Array什么时候使用,何时使用?有时用Array... 定义变量
var info:Array;
Run Code Online (Sandbox Code Playgroud)
..设置如下所示的错误,如"无法将任何[] []转换为数组"
info = [[], []];
Run Code Online (Sandbox Code Playgroud)
zor*_*404 21
之前对这个问题的回答已经过时了一段时间。
首先Array需要一个泛型参数:
var arr: Array<any>;
Run Code Online (Sandbox Code Playgroud)
这相当于:
var arr: any[];
Run Code Online (Sandbox Code Playgroud)
类型Array<any>和any[]是相同的,并且都是指具有可变/动态大小的数组。
Typescript 3.0 引入了元组,类似于具有固定/静态大小的数组,但实际上并非如此。
让我解释。
它们的语法如下所示:
var arr: [any];
var arr: [any, any];
var arr: [any, any, any];
var arr: [string, number, string?, MyType];
Run Code Online (Sandbox Code Playgroud)
Typescript 将强制您分配一个具有该长度的数组,并使用具有匹配类型的值。
当您索引数组打字稿时,它将识别该索引处的变量类型。
有趣的是,打字稿不会阻止您修改元组的大小,无论是通过使用类似的函数.push()还是为length. 所以你必须确保你不会无意中这样做。
您还可以为任何额外元素指定“休息”类型:
var arr: [any, any, ...any[]];
var arr: [string, number, string?, MyType, ...YourType[]];
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您可以将更多项分配给元组,数组的大小可能会发生变化。
注意:您不能将普通数组分配给元组。
如果您只指定休息类型,那么您将获得一个常规的旧数组。
以下 2 个表达式是等效的:
var arr: [...any[]];
var arr: any[];
Run Code Online (Sandbox Code Playgroud)
Rya*_*ugh 13
规范3.5.4规定了它们之间的关系:
表单的数组类型
ElementType[]等同于具有索引签名的对象类型[index: number]: ElementType以及一组等同于全局接口类型的成员,Array其中所有出现的魔术_element类型都替换为ElementType.
不能够转让[[], []]或[]以Array是一个错误.
TypeScript中没有"静态大小"数组的概念.他们都在谈论相同的底层JavaScript数组(动态大小):
var x = [1, 2];
x.push(3);
x[13] = 5;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22202 次 |
| 最近记录: |