TypeScript - 数组
<p class="blockParagraph-544a408c" data-key="f613acb532dd45f58fa772a448819fbd"><span class="text-4505230f--TextH400-3033861f--textContentFamily-49a318e1">在 TypeScript 中,数组类型有多种定义方式,比较灵活。</span></p><div class="blockHeadingContent-756c9114">
<div class="cnblogs_code">
<pre>let fibonacci: number[] = [<span style="color: rgba(128, 0, 128, 1)">1</span>, <span style="color: rgba(128, 0, 128, 1)">1</span>, <span style="color: rgba(128, 0, 128, 1)">2</span>, <span style="color: rgba(128, 0, 128, 1)">3</span>, <span style="color: rgba(128, 0, 128, 1)">5</span>];</pre>
</div>
<p><span class="text-4505230f--TextH400-3033861f--textContentFamily-49a318e1"><span data-key="c83567c2fbaf4b17a4fb20e0a69004c2"><span data-offset-key="c83567c2fbaf4b17a4fb20e0a69004c2:0">数组的项中<span data-offset-key="c83567c2fbaf4b17a4fb20e0a69004c2:1"><strong class="bold-3c254bd9" data-slate-leaf="true">不允许</strong><span data-offset-key="c83567c2fbaf4b17a4fb20e0a69004c2:2">出现其他的类型:</span></span></span></span></span></p>
</div>
<div class="codeBlock-18b09018">
<div class="codeHeader-e3625762--codeHeaderFloating-7f73cde3">
<div class="cnblogs_code">
<pre>let fibonacci: number[] = [<span style="color: rgba(128, 0, 128, 1)">1</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">1</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 128, 1)">2</span>, <span style="color: rgba(128, 0, 128, 1)">3</span>, <span style="color: rgba(128, 0, 128, 1)">5</span><span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> index.ts(1,5): error TS2322: Type '(number | string)[]' is not assignable to type 'number[]'.
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Type 'number | string' is not assignable to type 'number'.
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Type 'string' is not assignable to type 'number'.</span></pre>
</div>
<p><span class="text-4505230f--TextH400-3033861f--textContentFamily-49a318e1"><span data-key="3fd90d63bac844d2a9d5deea2a6e2a14"><span data-offset-key="3fd90d63bac844d2a9d5deea2a6e2a14:0">上例中,<span data-offset-key="3fd90d63bac844d2a9d5deea2a6e2a14:1"><code class="code-81e98f88" data-slate-leaf="true"></code><span data-offset-key="3fd90d63bac844d2a9d5deea2a6e2a14:2"> 的类型被推断为 <span data-offset-key="3fd90d63bac844d2a9d5deea2a6e2a14:3"><code class="code-81e98f88" data-slate-leaf="true">(number | string)[]</code><span data-offset-key="3fd90d63bac844d2a9d5deea2a6e2a14:4">,这是联合类型和数组的结合。</span></span></span></span></span></span></span><span class="text-4505230f--TextH400-3033861f--textContentFamily-49a318e1">数组的一些方法的参数也会根据数组在定义时约定的类型进行限制:</span></p>
</div>
</div>
<div class="codeBlock-18b09018">
<div class="codeHeader-e3625762--codeHeaderFloating-7f73cde3">
<div class="cnblogs_code">
<pre>let fibonacci: number[] = [<span style="color: rgba(128, 0, 128, 1)">1</span>, <span style="color: rgba(128, 0, 128, 1)">1</span>, <span style="color: rgba(128, 0, 128, 1)">2</span>, <span style="color: rgba(128, 0, 128, 1)">3</span>, <span style="color: rgba(128, 0, 128, 1)">5</span><span style="color: rgba(0, 0, 0, 1)">];
fibonacci.push(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">8</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> index.ts(2,16): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.</span></pre>
</div>
</div>
</div>
<p class="blockParagraph-544a408c" data-key="938dd1b48f3e4b828409417ea1fdf339"><span class="text-4505230f--TextH400-3033861f--textContentFamily-49a318e1"><span data-key="152a1c5ac1244aa588b551db0591f70f"><span data-offset-key="152a1c5ac1244aa588b551db0591f70f:0">上例中,<span data-offset-key="152a1c5ac1244aa588b551db0591f70f:1"><code class="code-81e98f88" data-slate-leaf="true">push</code><span data-offset-key="152a1c5ac1244aa588b551db0591f70f:2"> 方法只允许传入 <span data-offset-key="152a1c5ac1244aa588b551db0591f70f:3"><code class="code-81e98f88" data-slate-leaf="true">number</code><span data-offset-key="152a1c5ac1244aa588b551db0591f70f:4"> 类型的参数,但是却传了一个 <span data-offset-key="152a1c5ac1244aa588b551db0591f70f:5"><code class="code-81e98f88" data-slate-leaf="true">string</code><span data-offset-key="152a1c5ac1244aa588b551db0591f70f:6"> 类型的参数,所以报错了。</span></span></span></span></span></span></span></span></span></p>
<div class="blockHeadingContent-756c9114"><span class="text-4505230f--TextH400-3033861f--textContentFamily-49a318e1">接口也可以用来描述数组:</span></div>
<div class="codeBlock-18b09018">
<div class="codeHeader-e3625762--codeHeaderFloating-7f73cde3">
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">interface</span><span style="color: rgba(0, 0, 0, 1)"> NumberArray {
: number;
}
let fibonacci: NumberArray </span>= [<span style="color: rgba(128, 0, 128, 1)">1</span>, <span style="color: rgba(128, 0, 128, 1)">1</span>, <span style="color: rgba(128, 0, 128, 1)">2</span>, <span style="color: rgba(128, 0, 128, 1)">3</span>, <span style="color: rgba(128, 0, 128, 1)">5</span>];</pre>
</div>
</div>
</div>
<p class="blockParagraph-544a408c" data-key="aa16191fa7c74433bce6e0f956cd75fa"><span class="text-4505230f--TextH400-3033861f--textContentFamily-49a318e1"><span data-key="0ac6ee609a0f4cf587078ebbaf3648d9"><span data-offset-key="0ac6ee609a0f4cf587078ebbaf3648d9:0"><code class="code-81e98f88" data-slate-leaf="true">NumberArray</code><span data-offset-key="0ac6ee609a0f4cf587078ebbaf3648d9:1"> 表示:只要 <span data-offset-key="0ac6ee609a0f4cf587078ebbaf3648d9:2"><code class="code-81e98f88" data-slate-leaf="true">index</code><span data-offset-key="0ac6ee609a0f4cf587078ebbaf3648d9:3"> 的类型是 <span data-offset-key="0ac6ee609a0f4cf587078ebbaf3648d9:4"><code class="code-81e98f88" data-slate-leaf="true">number</code><span data-offset-key="0ac6ee609a0f4cf587078ebbaf3648d9:5">,那么值的类型必须是 <span data-offset-key="0ac6ee609a0f4cf587078ebbaf3648d9:6"><code class="code-81e98f88" data-slate-leaf="true">number</code><span data-offset-key="0ac6ee609a0f4cf587078ebbaf3648d9:7">。</span></span></span></span></span></span></span></span></span></span></p>
<p class="blockParagraph-544a408c" data-key="aa16191fa7c74433bce6e0f956cd75fa"><span class="text-4505230f--HeadingH700-04e1a2a3--textContentFamily-49a318e1">any 在数组中的应用,</span><span class="text-4505230f--TextH400-3033861f--textContentFamily-49a318e1"><span data-key="aa5fc6152ca648f79c0e0e1345d3e33d"><span data-offset-key="aa5fc6152ca648f79c0e0e1345d3e33d:0">一个比较常见的做法是,用 <span data-offset-key="aa5fc6152ca648f79c0e0e1345d3e33d:1"><code class="code-81e98f88" data-slate-leaf="true">any</code><span data-offset-key="aa5fc6152ca648f79c0e0e1345d3e33d:2"> 表示数组中允许出现任意类型:</span></span></span></span></span></p>
<div class="cnblogs_code">
<pre>let list: any[] = [<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Xcat Liu</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 128, 1)">25</span>, { website: <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">http://xcatliu.com</span><span style="color: rgba(128, 0, 0, 1)">'</span> }];</pre>
</div>
<div class="blockHeadingContent-756c9114"><span class="text-4505230f--HeadingH700-04e1a2a3--textContentFamily-49a318e1">类数组</span></div>
<div class="codeBlock-18b09018">
<div class="codeHeader-e3625762--codeHeaderFloating-7f73cde3">
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">function sum() {
let args: number[] </span>=<span style="color: rgba(0, 0, 0, 1)"> arguments;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> index.ts(2,7): error TS2322: Type 'IArguments' is not assignable to type 'number[]'.
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Property 'push' is missing in type 'IArguments'.</span></pre>
</div>
<p><span class="text-4505230f--TextH400-3033861f--textContentFamily-49a318e1"><span data-key="92c23d001d7c4b749168230d821c2a4d"><span data-offset-key="92c23d001d7c4b749168230d821c2a4d:0">事实上常见的类数组都有自己的接口定义,如 <span data-offset-key="92c23d001d7c4b749168230d821c2a4d:1"><code class="code-81e98f88" data-slate-leaf="true">IArguments</code><span data-offset-key="92c23d001d7c4b749168230d821c2a4d:2">, <span data-offset-key="92c23d001d7c4b749168230d821c2a4d:3"><code class="code-81e98f88" data-slate-leaf="true">NodeList</code><span data-offset-key="92c23d001d7c4b749168230d821c2a4d:4">, <span data-offset-key="92c23d001d7c4b749168230d821c2a4d:5"><code class="code-81e98f88" data-slate-leaf="true">HTMLCollection</code><span data-offset-key="92c23d001d7c4b749168230d821c2a4d:6"> 等:</span></span></span></span></span></span></span></span></span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">function sum() {
let args: IArguments </span>=<span style="color: rgba(0, 0, 0, 1)"> arguments;
}</span></pre>
</div>
<p> 数组里的元素也可以是接口里定义的</p>
<div class="cnblogs_code">
<pre>app: Info[] = []; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">这里数组的每一项需要满足{a: number, b: string}这种类型,这里定义app是一个空数组</span>
app = [{a: 1, b: 'b'<span style="color: rgba(0, 0, 0, 1)">}]
interface info{ </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> info是一个接口</span>
<span style="color: rgba(0, 0, 0, 1)"> a: number
b: string
}</span></pre>
</div>
<p> </p>
</div>
</div><br><br>
来源:https://www.cnblogs.com/xjy20170907/p/10882147.html
頁:
[1]