TypeScript 类型
<p>ES6的数据类型</p><ul>
<li>Boolean</li>
<li>Number</li>
<li>String</li>
<li>Array</li>
<li>Function</li>
<li>Object</li>
<li>Symbol</li>
<li>undefined</li>
<li>null</li>
</ul>
<p>TypeScript新加的数据类型</p>
<ul>
<li>void</li>
<li>any</li>
<li>never</li>
<li>元组</li>
<li>枚举</li>
<li>高级类型</li>
</ul>
<h2>1,数组</h2>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">数组 两种等价声明</span>
let arr1:number[] =
let arr2:Array</span><number> = </pre>
</div>
<h2>2,元组</h2>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">元组 //是一种特殊的数组,限定了数组的类型和个数</span>
let tuple: =
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">为元组添加一个新的元素会怎样?允许添加</span>
tuple.push(2<span style="color: rgba(0, 0, 0, 1)">)
console.log(tuple)
tuple[</span>2] <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 但是不能访问 //tuple type '' of length '2' has no element at index '2'.</span></pre>
</div>
<p>所以非常不推荐通过push往元组里加元素。</p>
<h2>3,函数类型</h2>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">通常返回值的类型是可以省略的,可以看到返回值的类型仍然是number</span>
let add=(x:number,y:number)=>x+<span style="color: rgba(0, 0, 0, 1)">y
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">定义一种函数类型compute,没有具体实现</span>
let compute:(x:number, y:number) =><span style="color: rgba(0, 0, 0, 1)">number
compute</span>=(a,b)=>a+b</pre>
</div>
<h2>4,对象类型</h2>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">对象</span>
let obj:object = {x:1, y:2<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)">obj.x=3; //不能赋值,因为object类型</span>
let obj2:{x:number,y:number} = {x:1, y:2<span style="color: rgba(0, 0, 0, 1)">}
obj2.x</span>=3 <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">可以</span></pre>
</div>
<h2>5,Symbol类型</h2>
<p>Symbol的含义是具有唯一的值。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">symbol </span>
let s1: symbol=<span style="color: rgba(0, 0, 0, 1)">Symbol()
let s2</span>=<span style="color: rgba(0, 0, 0, 1)">Symbol()
console.log(s1</span>==s2) <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">false</span></pre>
</div>
<p> </p>
<h2> 6,不能把其他类型赋值给undefined和null</h2>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">undefined ,null</span>
let un :undefined =<span style="color: rgba(0, 0, 0, 1)"> undefined
let nu: </span><span style="color: rgba(0, 0, 255, 1)">null</span> = <span style="color: rgba(0, 0, 255, 1)">null</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> un = 1 //声明了undefined,就不能赋值为其他任何类型</span>
let num2: number = 123<span style="color: rgba(0, 0, 0, 1)">
num2 </span>= undefined <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">不能将类型“undefined”分配给类型“number”。</span>
num2=<span style="color: rgba(0, 0, 255, 1)">null</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">不能将类型“null”分配给类型“number”。</span></pre>
</div>
<p>TS中undefined和null是任何类型的子类型。</p>
<p>可以通过改配置把"strictNullChecks": false, 设置为false。</p>
<p>允许把undefined和null赋值给其他类型的值。</p>
<p> </p>
<h2> 7,void</h2>
<p>JS中<strong>void是一种运算符,可以让任何表达式返回undefined</strong>.</p>
<p><strong><code>void</code> 运算符 </strong>对给定的表达式进行求值,然后返回 <code>undefined</code>。</p>
<p>void运算符通常只用于获取undefined的原始值,一般使用void(0),等同于void 0。</p>
<p> </p>
<h2> 8,never类型</h2>
<p>永远不会有返回值的类型</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">never</span>
let error=()=><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 0, 255, 1)">throw</span> <span style="color: rgba(0, 0, 255, 1)">new</span> Error('error'<span style="color: rgba(0, 0, 0, 1)">)
}
let endless</span>=()=><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 0, 255, 1)">while</span>(<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">){}
}</span></pre>
</div>
<h2> 9,枚举类型</h2>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">enum Role{
Reporter </span>=1<span style="color: rgba(0, 0, 0, 1)">,
Developer,
Maintainer,
Owner,
Guest
}</span></pre>
</div>
<p>实现原理:反向映射</p>
<div class="cnblogs_code">
<pre>"use strict"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> Role;
(</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (Role) {
Role = 1] = "Reporter"<span style="color: rgba(0, 0, 0, 1)">;
Role = 2] = "Developer"<span style="color: rgba(0, 0, 0, 1)">;
Role = 3] = "Maintainer"<span style="color: rgba(0, 0, 0, 1)">;
Role = 4] = "Owner"<span style="color: rgba(0, 0, 0, 1)">;
Role = 5] = "Guest"<span style="color: rgba(0, 0, 0, 1)">;
})(Role </span>|| (Role = {}));</pre>
</div>
<p>枚举分类:</p>
<p>常量枚举(编译时计算出结果,在运行时以产量出现)</p>
<p>Computed枚举:非常量表达式</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">enum Char{
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">const 编译时算出结果</span>
<span style="color: rgba(0, 0, 0, 1)"> a,
b </span>=<span style="color: rgba(0, 0, 0, 1)"> Char.a,
c</span>=1+3<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)">computed 运行时才会计算</span>
d=<span style="color: rgba(0, 0, 0, 1)">Math.random(),
e</span>='123'<span style="color: rgba(0, 0, 0, 1)">.length
}</span></pre>
</div>
<p>可以看到得到的js</p>
<div class="cnblogs_code">
<pre>"use strict"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> Char;
(</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (Char) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">const 编译时算出结果</span>
Char = 0] = "a"<span style="color: rgba(0, 0, 0, 1)">;
Char = 0] = "b"<span style="color: rgba(0, 0, 0, 1)">;
Char = 4] = "c"<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)">computed 运行时才会计算</span>
Char = Math.random()] = "d"<span style="color: rgba(0, 0, 0, 1)">;
Char = '123'.length] = "e"<span style="color: rgba(0, 0, 0, 1)">;
})(Char </span>|| (Char = {}));</pre>
</div>
<p>常亮枚举(用const声明的枚举)会在编译阶段被移除。不需要对象,只需要对象的值的时候用常量枚举,可以减少编译后的代码。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">const enum Month{
Jan,
Feb,
Mar
}
let month </span>=</pre>
</div>
<p>编译后的js</p>
<div class="cnblogs_code">
<pre>"use strict"<span style="color: rgba(0, 0, 0, 1)">;
let month </span>= ;</pre>
</div>
<p> </p>
</div>
<div id="MySignature" role="contentinfo">
<p><strong>如果觉得本文对您有帮助~可以<span style="display: none">支付宝(左)或</span>微信支持一下:</strong></p>
<br>
<p style="display: none"><strong>看到小伙伴打赏时给我写一些鼓励的话,真的非常感动,谢谢你们。</strong></p>
<br>
<p style="display: none"><strong>我开了个微信公众号(<span>第三个二维码</span>)用来分享自己的职场英语相关学习经验,感兴趣可以关注,我会不断更新~</strong></p><br>
<div class="pay_img"><img style="display: none" class="alipay" src="http://files.cnblogs.com/files/starof/starof_zfb.bmp" alt="支付宝打赏"><img src="http://files.cnblogs.com/files/starof/starof_wx.bmp" alt="微信打赏"><img style="display: none" src="https://files.cnblogs.com/files/starof/starof_gzh.bmp" alt="微信公众号"></div><br><br><br>
来源:https://www.cnblogs.com/starof/p/13043360.html
頁:
[1]