TypeScript - 内置对象
<p class="blockParagraph-544a408c" data-key="9b6b0522e55b4804b1913797a81df3e4"><span class="text-4505230f--TextH400-3033861f--textContentFamily-49a318e1"><span data-key="326ac707024a4419942426675accaf6f"><span data-offset-key="326ac707024a4419942426675accaf6f:0">JavaScript 中有很多内置对象,<span data-key="8ea64a9031614a2da2665a2bc0637758"><span data-offset-key="8ea64a9031614a2da2665a2bc0637758:0">它们可以直接在 TypeScript 中当做定义好了的类型。</span></span></span></span></span><span class="text-4505230f--TextH400-3033861f--textContentFamily-49a318e1">内置对象是指根据标准在全局作用域(Global)上存在的对象。这里的标准是指 ECMAScript 和其他环境(比如 DOM)的标准。</span></p><p class="blockParagraph-544a408c" data-key="824686e4ea144e6fadb575099c4c81ed"><span class="text-4505230f--TextH400-3033861f--textContentFamily-49a318e1">ECMAScript 标准提供的内置对象有:</span><span class="text-4505230f--TextH400-3033861f--textContentFamily-49a318e1"><span data-key="46eac7a6a4074f9e8ffca146434320b5"><span data-offset-key="46eac7a6a4074f9e8ffca146434320b5:0"><code class="code-81e98f88" data-slate-leaf="true">Boolean</code><span data-offset-key="46eac7a6a4074f9e8ffca146434320b5:1">、<span data-offset-key="46eac7a6a4074f9e8ffca146434320b5:2"><code class="code-81e98f88" data-slate-leaf="true">Error</code><span data-offset-key="46eac7a6a4074f9e8ffca146434320b5:3">、<span data-offset-key="46eac7a6a4074f9e8ffca146434320b5:4"><code class="code-81e98f88" data-slate-leaf="true">Date</code><span data-offset-key="46eac7a6a4074f9e8ffca146434320b5:5">、<span data-offset-key="46eac7a6a4074f9e8ffca146434320b5:6"><code class="code-81e98f88" data-slate-leaf="true">RegExp</code><span data-offset-key="46eac7a6a4074f9e8ffca146434320b5:7"> 等。</span></span></span></span></span></span></span></span></span></span><span class="text-4505230f--TextH400-3033861f--textContentFamily-49a318e1">我们可以在 TypeScript 中将变量定义为这些类型:</span></p>
<div class="cnblogs_code">
<pre>let b: Boolean = <span style="color: rgba(0, 0, 255, 1)">new</span> Boolean(<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">);
let e: Error </span>= <span style="color: rgba(0, 0, 255, 1)">new</span> Error(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Error occurred</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
let d: Date </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Date();
let r: RegExp </span>= //;</pre>
</div>
<p class="blockParagraph-544a408c" data-key="7c0bee5d0b23426ab1573d7ee3cc0380"><span class="text-4505230f--TextH400-3033861f--textContentFamily-49a318e1">DOM 和 BOM 提供的内置对象有:</span><span class="text-4505230f--TextH400-3033861f--textContentFamily-49a318e1"><span data-key="584f2dbaf2f6422ca9b69617b4a9b72c"><span data-offset-key="584f2dbaf2f6422ca9b69617b4a9b72c:0"><code class="code-81e98f88" data-slate-leaf="true">Document</code><span data-offset-key="584f2dbaf2f6422ca9b69617b4a9b72c:1">、<span data-offset-key="584f2dbaf2f6422ca9b69617b4a9b72c:2"><code class="code-81e98f88" data-slate-leaf="true">HTMLElement</code><span data-offset-key="584f2dbaf2f6422ca9b69617b4a9b72c:3">、<span data-offset-key="584f2dbaf2f6422ca9b69617b4a9b72c:4"><code class="code-81e98f88" data-slate-leaf="true">Event</code><span data-offset-key="584f2dbaf2f6422ca9b69617b4a9b72c:5">、<span data-offset-key="584f2dbaf2f6422ca9b69617b4a9b72c:6"><code class="code-81e98f88" data-slate-leaf="true">NodeList</code><span data-offset-key="584f2dbaf2f6422ca9b69617b4a9b72c:7"> 等。</span></span></span></span></span></span></span></span></span></span></p>
<div class="cnblogs_code">
<pre>let body: HTMLElement =<span style="color: rgba(0, 0, 0, 1)"> document.body;
let allDiv: NodeList </span>= document.querySelectorAll(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
document.addEventListener(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">click</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, function(e: MouseEvent) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Do something</span>
});</pre>
</div>
<p><span class="text-4505230f--TextH400-3033861f--textContentFamily-49a318e1">当你在使用一些常用的方法的时候,TypeScript 实际上已经帮你做了很多类型判断的工作了,比如:</span></p>
<div class="cnblogs_code">
<pre>Math.pow(<span style="color: rgba(128, 0, 128, 1)">10</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">2</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(1,14): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.</span></pre>
</div>
<p><span class="text-4505230f--TextH400-3033861f--textContentFamily-49a318e1"><span data-key="499b16e5b08d44168192951d46b1edeb"><span data-offset-key="499b16e5b08d44168192951d46b1edeb:0">上面的例子中,<span data-offset-key="499b16e5b08d44168192951d46b1edeb:1"><code class="code-81e98f88" data-slate-leaf="true">Math.pow</code><span data-offset-key="499b16e5b08d44168192951d46b1edeb:2"> 必须接受两个 <span data-offset-key="499b16e5b08d44168192951d46b1edeb:3"><code class="code-81e98f88" data-slate-leaf="true">number</code><span data-offset-key="499b16e5b08d44168192951d46b1edeb:4"> 类型的参数。事实上 <span data-offset-key="499b16e5b08d44168192951d46b1edeb:5"><code class="code-81e98f88" data-slate-leaf="true">Math.pow</code><span data-offset-key="499b16e5b08d44168192951d46b1edeb:6"> 的类型定义如下:</span></span></span></span></span></span></span></span></span></p>
<div class="codeBlock-18b09018">
<div data-key="75967827ab874e73bca8a829c13d5635">
<div class="codeLine-3035e01e" data-key="f14f593d6ba348d189060ea6e8de1dcb">
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">interface</span><span style="color: rgba(0, 0, 0, 1)"> Math {
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* Returns the value of a base expression taken to a specified power.
* @param x The base value of the expression.
* @param y The exponent value of the expression.
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
pow(x: number, y: number): number;
}</span></pre>
</div>
<p><span class="text-4505230f--TextH400-3033861f--textContentFamily-49a318e1">再举一个 DOM 中的例子:</span></p>
</div>
</div>
</div>
<div class="codeBlock-18b09018">
<div class="codeHeader-e3625762--codeHeaderFloating-7f73cde3">
<div class="cnblogs_code">
<pre>document.addEventListener(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">click</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, function(e) {
console.log(e.targetCurrent);
});
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> index.ts(2,17): error TS2339: Property 'targetCurrent' does not exist on type 'MouseEvent'.</span></pre>
</div>
<p><span class="text-4505230f--TextH400-3033861f--textContentFamily-49a318e1"><span data-key="6379434265bb4bb8aa87a9c508e3d40d"><span data-offset-key="6379434265bb4bb8aa87a9c508e3d40d:0">上面的例子中,<span data-offset-key="6379434265bb4bb8aa87a9c508e3d40d:1"><code class="code-81e98f88" data-slate-leaf="true">addEventListener</code><span data-offset-key="6379434265bb4bb8aa87a9c508e3d40d:2"> 方法是在 TypeScript 核心库中定义的:</span></span></span></span></span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">interface</span><span style="color: rgba(0, 0, 0, 1)"> Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEvent {
addEventListener(type: </span><span style="color: rgba(0, 0, 255, 1)">string</span>, listener: (ev: MouseEvent) => any, useCapture?: boolean): <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">;
}</span></pre>
</div>
<p><span class="text-4505230f--TextH400-3033861f--textContentFamily-49a318e1"><span data-key="da05796872474537ba96da86a09810ba"><span data-offset-key="da05796872474537ba96da86a09810ba:0">所以 <span data-offset-key="da05796872474537ba96da86a09810ba:1"><code class="code-81e98f88" data-slate-leaf="true">e</code><span data-offset-key="da05796872474537ba96da86a09810ba:2"> 被推断成了 <span data-offset-key="da05796872474537ba96da86a09810ba:3"><code class="code-81e98f88" data-slate-leaf="true">MouseEvent</code><span data-offset-key="da05796872474537ba96da86a09810ba:4">,而 <span data-offset-key="da05796872474537ba96da86a09810ba:5"><code class="code-81e98f88" data-slate-leaf="true">MouseEvent</code><span data-offset-key="da05796872474537ba96da86a09810ba:6"> 是没有 <span data-offset-key="da05796872474537ba96da86a09810ba:7"><code class="code-81e98f88" data-slate-leaf="true">targetCurrent</code><span data-offset-key="da05796872474537ba96da86a09810ba:8"> 属性的,所以报错了。</span></span></span></span></span></span></span></span></span></span></span></p>
</div>
</div>
<p class="blockParagraph-544a408c" data-key="d556b47460e6408d9456eaccc47c7b7a"><span class="text-4505230f--TextH400-3033861f--textContentFamily-49a318e1">注意,TypeScript 核心库的定义中不包含 Node.js 部分。</span><span class="text-4505230f--HeadingH700-04e1a2a3--textContentFamily-49a318e1">用 TypeScript 写 Node.js,</span><span class="text-4505230f--TextH400-3033861f--textContentFamily-49a318e1">Node.js 不是内置对象的一部分,如果想用 TypeScript 写 Node.js,则需要引入第三方声明文件:</span><span data-key="f2101bc9ed1b455d9f24ce5b6050e929"><span data-offset-key="f2101bc9ed1b455d9f24ce5b6050e929:0"><span class="prism-token tokenfunction ">npm<span data-offset-key="f2101bc9ed1b455d9f24ce5b6050e929:1"><span class="prism-token token 1"> <span data-offset-key="f2101bc9ed1b455d9f24ce5b6050e929:2"><span class="prism-token token 2 function ">install<span data-offset-key="f2101bc9ed1b455d9f24ce5b6050e929:3"><span class="prism-token token 3"> @types/node --save-dev</span></span></span></span></span></span></span></span></span></p><br><br>
来源:https://www.cnblogs.com/xjy20170907/p/10882509.html
頁:
[1]