TypeScript
<div><h3>什么是 TypeScript?</h3>
<p><code>TypeScript</code> 是 <code>JavaScript</code> 的类型的超集,它可以编译成纯 <code>JavaScript</code>。 编译出来的 <code>JavaScript</code> 可以运行在任何浏览器上。<code>TypeScript</code> 编译工具可以运行在任何服务器和任何系统上。<code>TypeScript</code> 是开源的。</p>
<h3>为什么选择TypeScript</h3>
<p>TypeScript 增加了代码的可读性和可维护性</p>
<ul>
<li>
<div class="reset-3c756112--listItemContent-756c9114" data-key="097b92017dfa4ac9a0f31b46863b4eff">
<p class="blockParagraph-544a408c--noMargin-acdf7afa" data-key="9cee7d1b844d41efbb89b84a6df6cd8b"><span class="text-4505230f--TextH400-3033861f--textContentFamily-49a318e1">类型系统实际上是最好的文档,大部分的函数看看类型的定义就可以知道如何使用了</span></p>
</div>
</li>
<li>
<div class="reset-3c756112--listItemContent-756c9114" data-key="c7ebcac243384403944627b2789d4339">
<p class="blockParagraph-544a408c--noMargin-acdf7afa" data-key="db8e2b2a5b6d452aa85dc2bf80b00e9e"><span class="text-4505230f--TextH400-3033861f--textContentFamily-49a318e1">可以在编译阶段就发现大部分错误,这总比在运行时候出错好</span></p>
</div>
</li>
<li data-slate-fragment="JTdCJTIyb2JqZWN0JTIyJTNBJTIyZG9jdW1lbnQlMjIlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJsaXN0LXVub3JkZXJlZCUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIyYmxvY2slMjIlMkMlMjJ0eXBlJTIyJTNBJTIybGlzdC1pdGVtJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJwYXJhZ3JhcGglMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiVFNyVCMSVCQiVFNSU5RSU4QiVFNyVCMyVCQiVFNyVCQiU5RiVFNSVBRSU5RSVFOSU5OSU4NSVFNCVCOCU4QSVFNiU5OCVBRiVFNiU5QyU4MCVFNSVBNSVCRCVFNyU5QSU4NCVFNiU5NiU4NyVFNiVBMSVBMyVFRiVCQyU4QyVFNSVBNCVBNyVFOSU4MyVBOCVFNSU4OCU4NiVFNyU5QSU4NCVFNSU4NyVCRCVFNiU5NSVCMCVFNyU5QyU4QiVFNyU5QyU4QiVFNyVCMSVCQiVFNSU5RSU4QiVFNyU5QSU4NCVFNSVBRSU5QSVFNCVCOSU4OSVFNSVCMCVCMSVFNSU4RiVBRiVFNCVCQiVBNSVFNyU5RiVBNSVFOSU4MSU5MyVFNSVBNiU4MiVFNCVCRCU5NSVFNCVCRCVCRiVFNyU5NCVBOCVFNCVCQSU4NiUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTVEJTdEJTJDJTdCJTIyb2JqZWN0JTIyJTNBJTIyYmxvY2slMjIlMkMlMjJ0eXBlJTIyJTNBJTIybGlzdC1pdGVtJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJwYXJhZ3JhcGglMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiVFNSU4RiVBRiVFNCVCQiVBNSVFNSU5QyVBOCVFNyVCQyU5NiVFOCVBRiU5MSVFOSU5OCVCNiVFNiVBRSVCNSVFNSVCMCVCMSVFNSU4RiU5MSVFNyU4RSVCMCVFNSVBNCVBNyVFOSU4MyVBOCVFNSU4OCU4NiVFOSU5NCU5OSVFOCVBRiVBRiVFRiVCQyU4QyVFOCVCRiU5OSVFNiU4MCVCQiVFNiVBRiU5NCVFNSU5QyVBOCVFOCVCRiU5MCVFOCVBMSU4QyVFNiU5NyVCNiVFNSU4MCU5OSVFNSU4NyVCQSVFOSU5NCU5OSVFNSVBNSVCRCUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTVEJTdEJTJDJTdCJTIyb2JqZWN0JTIyJTNBJTIyYmxvY2slMjIlMkMlMjJ0eXBlJTIyJTNBJTIybGlzdC1pdGVtJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJwYXJhZ3JhcGglMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiVFNSVBMiU5RSVFNSVCQyVCQSVFNCVCQSU4NiVFNyVCQyU5NiVFOCVCRSU5MSVFNSU5OSVBOCVFNSU5MiU4QyUyMElERSUyMCVFNyU5QSU4NCVFNSU4QSU5RiVFOCU4MyVCRCVFRiVCQyU4QyVFNSU4QyU4NSVFNiU4QiVBQyVFNCVCQiVBMyVFNyVBMCU4MSVFOCVBMSVBNSVFNSU4NSVBOCVFMyU4MCU4MSVFNiU4RSVBNSVFNSU4RiVBMyVFNiU4RiU5MCVFNyVBNCVCQSVFMyU4MCU4MSVFOCVCNyVCMyVFOCVCRCVBQyVFNSU4OCVCMCVFNSVBRSU5QSVFNCVCOSU4OSVFMyU4MCU4MSVFOSU4NyU4RCVFNiU5RSU4NCVFNyVBRCU4OSUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTVEJTdEJTVEJTdEJTVEJTdE">
<div class="reset-3c756112--listItemContent-756c9114" data-key="b7fbad1910774ba4862da18ab65e525b">
<p class="blockParagraph-544a408c--noMargin-acdf7afa" data-key="58552ec1ec0141c49a4c0235a4f3e4e0"><span class="text-4505230f--TextH400-3033861f--textContentFamily-49a318e1">增强了编辑器和 IDE 的功能,包括代码补全、接口提示、跳转到定义、重构等</span></p>
<p class="blockParagraph-544a408c--noMargin-acdf7afa" data-key="58552ec1ec0141c49a4c0235a4f3e4e0"> </p>
</div>
</li>
</ul>
</div>
<h3>安装 TypeScript</h3>
<div class="cnblogs_code">
<pre>npm install -g typescript</pre>
</div>
<p> 编译一个 <code>TypeScript</code> 文件 , <code>TypeScript</code> 编写的文件以 <code>.ts</code> 为后缀,用 <code>TypeScript</code> 编写 <code>React</code> 时,以 <code>.tsx</code> 为后缀。</p>
<div class="cnblogs_code">
<pre>tsc hello.ts 编译命令会声场hello.js文件</pre>
</div>
<p> hello.ts: </p>
<div class="cnblogs_code">
<pre>function sayHello(person: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Hello, </span><span style="color: rgba(128, 0, 0, 1)">'</span> +<span style="color: rgba(0, 0, 0, 1)"> person;
}
let user </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Tom</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
console.log(sayHello(user)); </span> </pre>
</div>
<p> </p>
<p>生成的hello.js</p>
<p> </p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">function sayHello(person) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Hello, </span><span style="color: rgba(128, 0, 0, 1)">'</span> +<span style="color: rgba(0, 0, 0, 1)"> person;
}
</span><span style="color: rgba(0, 0, 255, 1)">var</span> user = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Tom</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
console.log(sayHello(user));</span></pre>
</div>
<p> </p>
<p><code>TypeScript</code> 中,使用 <code>:</code> 指定变量的类型,<code>:</code> 的前后有没有空格都可以。<span data-offset-key="6df16eceeb0743d3bb23427b9ecef0d9:2"> <span data-offset-key="6df16eceeb0743d3bb23427b9ecef0d9:3"><code class="code-81e98f88" data-slate-leaf="true">person</code><span data-offset-key="6df16eceeb0743d3bb23427b9ecef0d9:4"> 参数类型为 <span data-offset-key="6df16eceeb0743d3bb23427b9ecef0d9:5" data-slate-fragment="JTdCJTIyb2JqZWN0JTIyJTNBJTIyZG9jdW1lbnQlMjIlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJwYXJhZ3JhcGglMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUyMCUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTJDJTdCJTIyb2JqZWN0JTIyJTNBJTIybGVhZiUyMiUyQyUyMnRleHQlMjIlM0ElMjJwZXJzb24lMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMm1hcmslMjIlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZSUyMiUyQyUyMmRhdGElMjIlM0ElN0IlN0QlN0QlNUQlN0QlMkMlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUyMCVFNSU4RiU4MiVFNiU5NSVCMCVFNyVCMSVCQiVFNSU5RSU4QiVFNCVCOCVCQSUyMCUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTJDJTdCJTIyb2JqZWN0JTIyJTNBJTIybGVhZiUyMiUyQyUyMnRleHQlMjIlM0ElMjJzdHJpbmclMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMm1hcmslMjIlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZSUyMiUyQyUyMmRhdGElMjIlM0ElN0IlN0QlN0QlNUQlN0QlNUQlN0QlNUQlN0QlNUQlN0Q="><code class="code-81e98f88" data-slate-leaf="true">string</code></span></span></span></span></p>
<p><code>TypeScript</code> 编译的时候即使报错了,还是会生成编译结果,我们仍然可以使用这个编译之后的文件。</p>
<p> </p>
<p> 错误演示: <code class="code-81e98f88" data-slate-leaf="true">person</code><span data-offset-key="6df16eceeb0743d3bb23427b9ecef0d9:4"> 参数类型为 <span data-offset-key="6df16eceeb0743d3bb23427b9ecef0d9:5" data-slate-fragment="JTdCJTIyb2JqZWN0JTIyJTNBJTIyZG9jdW1lbnQlMjIlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJwYXJhZ3JhcGglMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUyMCUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTJDJTdCJTIyb2JqZWN0JTIyJTNBJTIybGVhZiUyMiUyQyUyMnRleHQlMjIlM0ElMjJwZXJzb24lMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMm1hcmslMjIlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZSUyMiUyQyUyMmRhdGElMjIlM0ElN0IlN0QlN0QlNUQlN0QlMkMlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUyMCVFNSU4RiU4MiVFNiU5NSVCMCVFNyVCMSVCQiVFNSU5RSU4QiVFNCVCOCVCQSUyMCUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTJDJTdCJTIyb2JqZWN0JTIyJTNBJTIybGVhZiUyMiUyQyUyMnRleHQlMjIlM0ElMjJzdHJpbmclMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMm1hcmslMjIlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZSUyMiUyQyUyMmRhdGElMjIlM0ElN0IlN0QlN0QlNUQlN0QlNUQlN0QlNUQlN0QlNUQlN0Q="><code class="code-81e98f88" data-slate-leaf="true">string 传值为数组</code></span></span></p>
<div class="cnblogs_code">
<pre>function sayHello(person: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Hello, </span><span style="color: rgba(128, 0, 0, 1)">'</span> +<span style="color: rgba(0, 0, 0, 1)"> person;
}
let user </span>= [<span style="color: rgba(128, 0, 128, 1)">0</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(0, 0, 0, 1)">];
console.log(sayHello(user));</span></pre>
</div>
<pre>编辑器中会提示错误,编译的时候也会出错<br><br></pre>
<div class="cnblogs_code">
<pre>index.ts(<span style="color: rgba(128, 0, 128, 1)">6</span>,<span style="color: rgba(128, 0, 128, 1)">22</span>): error TS2345: Argument of type <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">number[]</span><span style="color: rgba(128, 0, 0, 1)">'</span> <span style="color: rgba(0, 0, 255, 1)">is</span> not assignable to parameter of type <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">string</span><span style="color: rgba(128, 0, 0, 1)">'</span>.</pre>
</div>
<p> </p>
<h3>TypeScript中数据类型介绍</h3>
<ul>
<li>定义布尔类型<br>//ts声明布尔类型的变量<br><code>let flag:boolean=true; </code></li>
<li>ts中定义数值类型<br><code>let count:number=100</code></li>
<li>ts中定义字符类型<br><code>let str:string='hello world'</code></li>
<li>ts定义void类型:<span data-offset-key="15629:1"><code class="code-81e98f88" data-slate-leaf="true">void</code><span data-offset-key="15629:2" data-slate-fragment="JTdCJTIyb2JqZWN0JTIyJTNBJTIyZG9jdW1lbnQlMjIlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJwYXJhZ3JhcGglMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMnZvaWQlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMm1hcmslMjIlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZSUyMiUyQyUyMmRhdGElMjIlM0ElN0IlN0QlN0QlNUQlN0QlMkMlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUyMCVFOCVBMSVBOCVFNyVBNCVCQSVFNiVCMiVBMSVFNiU5QyU4OSVFNCVCQiVCQiVFNCVCRCU5NSVFOCVCRiU5NCVFNSU5QiU5RSVFNSU4MCVCQyVFNyU5QSU4NCVFNSU4NyVCRCVFNiU5NSVCMCVFRiVCQyU5QSUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTVEJTdE"> 表示没有任何返回值的函数:</span></span></li>
<li>
<div class="cnblogs_code">
<pre>function print:<span style="color: rgba(0, 0, 255, 1)">void</span>(<span style="color: rgba(0, 0, 255, 1)">params</span><span style="color: rgba(0, 0, 0, 1)">){
console.log(</span><span style="color: rgba(0, 0, 255, 1)">params</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)">声明一个void类型的变量没有什么大用,因为你只能为它赋予undefined和null:</span>
let unusable: <span style="color: rgba(0, 0, 255, 1)">void</span> = undefined;</pre>
</div>
</li>
<li>ts中定义undefined类型<br><code>let a:undefined=undefined</code></li>
<li>ts中定义null<br><code>let b:null=null</code></li>
<li><span data-offset-key="15664:3"><code class="code-81e98f88" data-slate-leaf="true">undefined</code><span data-offset-key="15664:4"> 和 <span data-offset-key="15664:5"><code class="code-81e98f88" data-slate-leaf="true">null</code><span data-offset-key="15664:6"> 是所有类型的子类型。也就是说 <span data-offset-key="15664:7"><code class="code-81e98f88" data-slate-leaf="true">undefined</code><span data-offset-key="15664:8"> 类型的变量,可以赋值给 <span data-offset-key="15664:9"><code class="code-81e98f88" data-slate-leaf="true">number</code><span data-offset-key="15664:10" data-slate-fragment="JTdCJTIyb2JqZWN0JTIyJTNBJTIyZG9jdW1lbnQlMjIlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJwYXJhZ3JhcGglMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMnVuZGVmaW5lZCUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIybWFyayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJjb2RlJTIyJTJDJTIyZGF0YSUyMiUzQSU3QiU3RCU3RCU1RCU3RCUyQyU3QiUyMm9iamVjdCUyMiUzQSUyMmxlYWYlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJTIwJUU1JTkyJThDJTIwJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlN0QlMkMlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMm51bGwlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMm1hcmslMjIlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZSUyMiUyQyUyMmRhdGElMjIlM0ElN0IlN0QlN0QlNUQlN0QlMkMlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUyMCVFNiU5OCVBRiVFNiU4OSU4MCVFNiU5QyU4OSVFNyVCMSVCQiVFNSU5RSU4QiVFNyU5QSU4NCVFNSVBRCU5MCVFNyVCMSVCQiVFNSU5RSU4QiVFMyU4MCU4MiVFNCVCOSU5RiVFNSVCMCVCMSVFNiU5OCVBRiVFOCVBRiVCNCUyMCUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTJDJTdCJTIyb2JqZWN0JTIyJTNBJTIybGVhZiUyMiUyQyUyMnRleHQlMjIlM0ElMjJ1bmRlZmluZWQlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMm1hcmslMjIlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZSUyMiUyQyUyMmRhdGElMjIlM0ElN0IlN0QlN0QlNUQlN0QlMkMlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUyMCVFNyVCMSVCQiVFNSU5RSU4QiVFNyU5QSU4NCVFNSU4RiU5OCVFOSU4NyU4RiVFRiVCQyU4QyVFNSU4RiVBRiVFNCVCQiVBNSVFOCVCNSU4QiVFNSU4MCVCQyVFNyVCQiU5OSUyMCUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTJDJTdCJTIyb2JqZWN0JTIyJTNBJTIybGVhZiUyMiUyQyUyMnRleHQlMjIlM0ElMjJudW1iZXIlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMm1hcmslMjIlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZSUyMiUyQyUyMmRhdGElMjIlM0ElN0IlN0QlN0QlNUQlN0QlMkMlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUyMCVFNyVCMSVCQiVFNSU5RSU4QiVFNyU5QSU4NCVFNSU4RiU5OCVFOSU4NyU4RiVFRiVCQyU5QSUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTVEJTdE"> 类型的变量:</span></span></span></span></span></span></span></span></li>
<li>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 这样不会报错</span>
let num: number =<span style="color: rgba(0, 0, 0, 1)"> undefined;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 这样也不会报错</span>
<span style="color: rgba(0, 0, 0, 1)">let u: undefined;
let num: number </span>= u;</pre>
</div>
</li>
<li>ts中定义any(任意类型:变量值可以为任意类型),<span data-slate-fragment="JTdCJTIyb2JqZWN0JTIyJTNBJTIyZG9jdW1lbnQlMjIlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJwYXJhZ3JhcGglMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiVFNSVBNiU4MiVFNiU5RSU5QyVFNiU5OCVBRiVFNCVCOCU4MCVFNCVCOCVBQSVFNiU5OSVBRSVFOSU4MCU5QSVFNyVCMSVCQiVFNSU5RSU4QiVFRiVCQyU4QyVFNSU5QyVBOCVFOCVCNSU4QiVFNSU4MCVCQyVFOCVCRiU4NyVFNyVBOCU4QiVFNCVCOCVBRCVFNiU5NCVCOSVFNSU4RiU5OCVFNyVCMSVCQiVFNSU5RSU4QiVFNiU5OCVBRiVFNCVCOCU4RCVFOCVBMiVBQiVFNSU4NSU4MSVFOCVBRSVCOCVFNyU5QSU4NCVFRiVCQyU5QSUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTVEJTdE">如果是一个普通类型,在赋值过程中改变类型是不被允许的:</span><span data-offset-key="276b8c0a0b324566ab55156abe66394d:1"><code class="code-81e98f88" data-slate-leaf="true">any</code><span data-offset-key="276b8c0a0b324566ab55156abe66394d:2" data-slate-fragment="JTdCJTIyb2JqZWN0JTIyJTNBJTIyZG9jdW1lbnQlMjIlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJwYXJhZ3JhcGglMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMmFueSUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIybWFyayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJjb2RlJTIyJTJDJTIyZGF0YSUyMiUzQSU3QiU3RCU3RCU1RCU3RCUyQyU3QiUyMm9iamVjdCUyMiUzQSUyMmxlYWYlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJTIwJUU3JUIxJUJCJUU1JTlFJThCJUVGJUJDJThDJUU1JTg4JTk5JUU1JTg1JTgxJUU4JUFFJUI4JUU4JUEyJUFCJUU4JUI1JThCJUU1JTgwJUJDJUU0JUI4JUJBJUU0JUJCJUJCJUU2JTg0JThGJUU3JUIxJUJCJUU1JTlFJThCJUUzJTgwJTgyJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlN0QlNUQlN0QlNUQlN0QlNUQlN0Q="> 类型,则允许被赋值为任意类型。</span></span><br><code>let anyData:any=''</code></li>
<li>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">普通类型会报错</span>
let myFavoriteNumber: <span style="color: rgba(0, 0, 255, 1)">string</span> = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">seven</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
myFavoriteNumber </span>= <span style="color: rgba(128, 0, 128, 1)">7</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,1): error TS2322: Type 'number' is not assignable to type 'string'.
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">any类型不会报错</span>
let myFavoriteNumber: any = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">seven</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
myFavoriteNumber </span>= <span style="color: rgba(128, 0, 128, 1)">7</span>;</pre>
</div>
</li>
<li>定义数组:</li>
</ul>
<p style="margin-left: 60px">第一种:元素类型后面加一个[] </p>
<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[]=[<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)">4</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)">定义一个字符数组</span>
let arr2:<span style="color: rgba(0, 0, 255, 1)">string</span>[]=[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">jack</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">robin</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">pony</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)"> 定义一个对象数组</span>
let arr3:<span style="color: rgba(0, 0, 255, 1)">object</span>[]=<span style="color: rgba(0, 0, 0, 1)">[
{name:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">jack</span><span style="color: rgba(128, 0, 0, 1)">'</span>,age:<span style="color: rgba(128, 0, 128, 1)">1967</span><span style="color: rgba(0, 0, 0, 1)">},
{name:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">robin</span><span style="color: rgba(128, 0, 0, 1)">'</span>,age:<span style="color: rgba(128, 0, 128, 1)">1968</span><span style="color: rgba(0, 0, 0, 1)">},
{name:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">pony</span><span style="color: rgba(128, 0, 0, 1)">'</span>,birthday:<span style="color: rgba(128, 0, 128, 1)">1974</span><span style="color: rgba(0, 0, 0, 1)">}
]</span></pre>
</div>
<ul>
<li>第二种:使用数组泛型,<code>Array<元素类型></code></li>
</ul>
<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:Array<<span style="color: rgba(0, 0, 255, 1)">string</span>>=[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">jack</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">robin</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">pony</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)">定一个数字数组</span>
let arr2:Array<number>=[<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)">4</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)">定义一个对象数组</span>
let arr3:Array<<span style="color: rgba(0, 0, 255, 1)">object</span>>=<span style="color: rgba(0, 0, 0, 1)">[
{name:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">jack</span><span style="color: rgba(128, 0, 0, 1)">'</span>,age:<span style="color: rgba(128, 0, 128, 1)">1967</span><span style="color: rgba(0, 0, 0, 1)">},
{name:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">robin</span><span style="color: rgba(128, 0, 0, 1)">'</span>,age:<span style="color: rgba(128, 0, 128, 1)">1968</span><span style="color: rgba(0, 0, 0, 1)">},
{name:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">pony</span><span style="color: rgba(128, 0, 0, 1)">'</span>,birthday:<span style="color: rgba(128, 0, 128, 1)">1974</span><span style="color: rgba(0, 0, 0, 1)">}
]</span></pre>
</div>
<ul>
<li>对象的定义</li>
</ul>
<p> 方案1:</p>
<p> </p>
<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:{name:<span style="color: rgba(0, 0, 255, 1)">string</span>,age:number,isMarry:boolean}=<span style="color: rgba(0, 0, 0, 1)">{
name:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">zs</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
age:</span><span style="color: rgba(128, 0, 128, 1)">30</span><span style="color: rgba(0, 0, 0, 1)">,
isMarry:</span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">
}</span></pre>
</div>
<p> 方案2:</p>
<p style="margin-left: 60px"><span data-offset-key="16a5c65b67db4b41a63538f70398c42d:0">定义了一个接口 <span data-offset-key="16a5c65b67db4b41a63538f70398c42d:1"><code class="code-81e98f88" data-slate-leaf="true">Person</code><span data-offset-key="16a5c65b67db4b41a63538f70398c42d:2">,接着定义了一个变量 p1<span data-offset-key="16a5c65b67db4b41a63538f70398c42d:3"><code class="code-81e98f88" data-slate-leaf="true"></code><span data-offset-key="16a5c65b67db4b41a63538f70398c42d:4">,它的类型是 <span data-offset-key="16a5c65b67db4b41a63538f70398c42d:5"><code class="code-81e98f88" data-slate-leaf="true">Person</code><span data-offset-key="16a5c65b67db4b41a63538f70398c42d:6">。这样,我们就约束了 p1<span data-offset-key="16a5c65b67db4b41a63538f70398c42d:7"><code class="code-81e98f88" data-slate-leaf="true"></code><span data-offset-key="16a5c65b67db4b41a63538f70398c42d:8"> 的形状必须和接口 <span data-offset-key="16a5c65b67db4b41a63538f70398c42d:9"><code class="code-81e98f88" data-slate-leaf="true">Person</code><span data-offset-key="16a5c65b67db4b41a63538f70398c42d:10" data-slate-fragment="JTdCJTIyb2JqZWN0JTIyJTNBJTIyZG9jdW1lbnQlMjIlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJwYXJhZ3JhcGglMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiVFNSVBRSU5QSVFNCVCOSU4OSVFNCVCQSU4NiVFNCVCOCU4MCVFNCVCOCVBQSVFNiU4RSVBNSVFNSU4RiVBMyUyMCUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTJDJTdCJTIyb2JqZWN0JTIyJTNBJTIybGVhZiUyMiUyQyUyMnRleHQlMjIlM0ElMjJQZXJzb24lMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMm1hcmslMjIlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZSUyMiUyQyUyMmRhdGElMjIlM0ElN0IlN0QlN0QlNUQlN0QlMkMlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiVFRiVCQyU4QyVFNiU4RSVBNSVFNyU5RCU4MCVFNSVBRSU5QSVFNCVCOSU4OSVFNCVCQSU4NiVFNCVCOCU4MCVFNCVCOCVBQSVFNSU4RiU5OCVFOSU4NyU4RiUyMCUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTJDJTdCJTIyb2JqZWN0JTIyJTNBJTIybGVhZiUyMiUyQyUyMnRleHQlMjIlM0ElMjJ0b20lMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMm1hcmslMjIlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZSUyMiUyQyUyMmRhdGElMjIlM0ElN0IlN0QlN0QlNUQlN0QlMkMlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiVFRiVCQyU4QyVFNSVBRSU4MyVFNyU5QSU4NCVFNyVCMSVCQiVFNSU5RSU4QiVFNiU5OCVBRiUyMCUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTJDJTdCJTIyb2JqZWN0JTIyJTNBJTIybGVhZiUyMiUyQyUyMnRleHQlMjIlM0ElMjJQZXJzb24lMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMm1hcmslMjIlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZSUyMiUyQyUyMmRhdGElMjIlM0ElN0IlN0QlN0QlNUQlN0QlMkMlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiVFMyU4MCU4MiVFOCVCRiU5OSVFNiVBMCVCNyVFRiVCQyU4QyVFNiU4OCU5MSVFNCVCQiVBQyVFNSVCMCVCMSVFNyVCQSVBNiVFNiU5RCU5RiVFNCVCQSU4NiUyMCUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTJDJTdCJTIyb2JqZWN0JTIyJTNBJTIybGVhZiUyMiUyQyUyMnRleHQlMjIlM0ElMjJ0b20lMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMm1hcmslMjIlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZSUyMiUyQyUyMmRhdGElMjIlM0ElN0IlN0QlN0QlNUQlN0QlMkMlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUyMCVFNyU5QSU4NCVFNSVCRCVBMiVFNyU4QSVCNiVFNSVCRiU4NSVFOSVBMSVCQiVFNSU5MiU4QyVFNiU4RSVBNSVFNSU4RiVBMyUyMCUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTJDJTdCJTIyb2JqZWN0JTIyJTNBJTIybGVhZiUyMiUyQyUyMnRleHQlMjIlM0ElMjJQZXJzb24lMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMm1hcmslMjIlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZSUyMiUyQyUyMmRhdGElMjIlM0ElN0IlN0QlN0QlNUQlN0QlMkMlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUyMCVFNCVCOCU4MCVFOCU4NyVCNCVFMyU4MCU4MiUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTVEJTdE"> 一致。</span></span></span></span></span></span></span></span></span></span></span></p>
<p style="margin-left: 60px"> <span data-slate-fragment="JTdCJTIyb2JqZWN0JTIyJTNBJTIyZG9jdW1lbnQlMjIlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJwYXJhZ3JhcGglMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiVFNSVBRSU5QSVFNCVCOSU4OSVFNyU5QSU4NCVFNSU4RiU5OCVFOSU4NyU4RiVFNiVBRiU5NCVFNiU4RSVBNSVFNSU4RiVBMyVFNSVCMCU5MSVFNCVCQSU4NiVFNCVCOCU4MCVFNCVCQSU5QiVFNSVCMSU5RSVFNiU4MCVBNyVFNiU5OCVBRiVFNCVCOCU4RCVFNSU4NSU4MSVFOCVBRSVCOCVFNyU5QSU4NCUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTVEJTdE">定义的变量比接口少了一些属性是不允许的,<span data-slate-fragment="JTdCJTIyb2JqZWN0JTIyJTNBJTIyZG9jdW1lbnQlMjIlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJwYXJhZ3JhcGglMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiVFNSVBNCU5QSVFNCVCOCU4MCVFNCVCQSU5QiVFNSVCMSU5RSVFNiU4MCVBNyVFNCVCOSU5RiVFNiU5OCVBRiVFNCVCOCU4RCVFNSU4NSU4MSVFOCVBRSVCOCVFNyU5QSU4NCUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTVEJTdE">多一些属性也是不允许的,<span data-offset-key="8f81b38d6a30490383df21a20d51c3a5:1"><strong class="bold-3c254bd9" data-slate-leaf="true">赋值的时候,变量的形状必须和接口的形状保持一致</strong><span data-offset-key="8f81b38d6a30490383df21a20d51c3a5:2" data-slate-fragment="JTdCJTIyb2JqZWN0JTIyJTNBJTIyZG9jdW1lbnQlMjIlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJwYXJhZ3JhcGglMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiVFOCVCNSU4QiVFNSU4MCVCQyVFNyU5QSU4NCVFNiU5NyVCNiVFNSU4MCU5OSVFRiVCQyU4QyVFNSU4RiU5OCVFOSU4NyU4RiVFNyU5QSU4NCVFNSVCRCVBMiVFNyU4QSVCNiVFNSVCRiU4NSVFOSVBMSVCQiVFNSU5MiU4QyVFNiU4RSVBNSVFNSU4RiVBMyVFNyU5QSU4NCVFNSVCRCVBMiVFNyU4QSVCNiVFNCVCRiU5RCVFNiU4QyU4MSVFNCVCOCU4MCVFOCU4NyVCNCUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIybWFyayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJib2xkJTIyJTJDJTIyZGF0YSUyMiUzQSU3QiU3RCU3RCU1RCU3RCUyQyU3QiUyMm9iamVjdCUyMiUzQSUyMmxlYWYlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJUUzJTgwJTgyJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlN0QlNUQlN0QlNUQlN0QlNUQlN0Q=">。</span></span></span></span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 使用接口定义属性值的类型</span>
<span style="color: rgba(0, 0, 255, 1)">interface</span> Person=<span style="color: rgba(0, 0, 0, 1)">{
name:</span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
age:number;
isMarry:boolean;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 创建对象的时候引用该接口, 进行属性值类型的约束</span>
let p1:Person=<span style="color: rgba(0, 0, 0, 1)">{
name:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">zs</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
age:</span><span style="color: rgba(128, 0, 128, 1)">30</span><span style="color: rgba(0, 0, 0, 1)">,
isMarry:</span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">
}</span></pre>
</div>
<p> </p>
<h3>函数的定义</h3>
<p><span data-slate-fragment="JTdCJTIyb2JqZWN0JTIyJTNBJTIyZG9jdW1lbnQlMjIlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJwYXJhZ3JhcGglMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiVFNSU4NyVCRCVFNiU5NSVCMCVFNiU5QyU4OSVFOCVCRSU5MyVFNSU4NSVBNSVFNSU5MiU4QyVFOCVCRSU5MyVFNSU4NyVCQSVFRiVCQyU4QyVFOCVBNiU4MSVFNSU5QyVBOCUyMFR5cGVTY3JpcHQlMjAlRTQlQjglQUQlRTUlQUYlQjklRTUlODUlQjYlRTglQkYlOUIlRTglQTElOEMlRTclQkElQTYlRTYlOUQlOUYlRUYlQkMlOEMlRTklOUMlODAlRTglQTYlODElRTYlOEElOEElRTglQkUlOTMlRTUlODUlQTUlRTUlOTIlOEMlRTglQkUlOTMlRTUlODclQkElRTklODMlQkQlRTglODAlODMlRTglOTklOTElRTUlODglQjAlRUYlQkMlOEMlRTUlODUlQjYlRTQlQjglQUQlRTUlODclQkQlRTYlOTUlQjAlRTUlQTMlQjAlRTYlOTglOEUlRTclOUElODQlRTclQjElQkIlRTUlOUUlOEIlRTUlQUUlOUElRTQlQjklODklRTglQkUlODMlRTclQUUlODAlRTUlOEQlOTUlRUYlQkMlOUElMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCU3RCU1RCU3RCU1RCU3RCU1RCU3RA=="> 函数有输入和输出,要在 TypeScript 中对其进行约束,需要把输入和输出都考虑到</span></p>
<p> 加入了类型的约束,只要体现在参数和返回值上面</p>
<p> 1. <span data-slate-fragment="JTdCJTIyb2JqZWN0JTIyJTNBJTIyZG9jdW1lbnQlMjIlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJwYXJhZ3JhcGglMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiVFNSU4NyVCRCVFNiU5NSVCMCVFNSVBMyVCMCVFNiU5OCU4RSVFNyU5QSU4NCVFNyVCMSVCQiVFNSU5RSU4QiVFNSVBRSU5QSVFNCVCOSU4OSVFOCVCRSU4MyVFNyVBRSU4MCVFNSU4RCU5NSUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTVEJTdE">函数声明的类型定义</span></p>
<div class="cnblogs_code">
<pre>function sum(a:number,b:number):<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">求和结果为:</span><span style="color: rgba(128, 0, 0, 1)">'</span>+(a+<span style="color: rgba(0, 0, 0, 1)">b);
}</span></pre>
</div>
<p> <span style="color: rgba(255, 0, 0, 1)" data-slate-fragment="JTdCJTIyb2JqZWN0JTIyJTNBJTIyZG9jdW1lbnQlMjIlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJwYXJhZ3JhcGglMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiVFOCVCRSU5MyVFNSU4NSVBNSVFNSVBNCU5QSVFNCVCRCU5OSVFNyU5QSU4NCVFRiVCQyU4OCVFNiU4OCU5NiVFOCU4MCU4NSVFNSVCMCU5MSVFNCVCQSU4RSVFOCVBNiU4MSVFNiVCMSU4MiVFNyU5QSU4NCVFRiVCQyU4OSVFNSU4RiU4MiVFNiU5NSVCMCVFRiVCQyU4QyVFNiU5OCVBRiVFNCVCOCU4RCVFOCVBMiVBQiVFNSU4NSU4MSVFOCVBRSVCOCVFNyU5QSU4NCUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIybWFyayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJib2xkJTIyJTJDJTIyZGF0YSUyMiUzQSU3QiU3RCU3RCU1RCU3RCU1RCU3RCU1RCU3RCU1RCU3RA==">输入多余的(或者少于要求的)参数,是不被允许的</span></p>
<p><span style="color: rgba(255, 0, 0, 1)" data-slate-fragment="JTdCJTIyb2JqZWN0JTIyJTNBJTIyZG9jdW1lbnQlMjIlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJwYXJhZ3JhcGglMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiVFOCVCRSU5MyVFNSU4NSVBNSVFNSVBNCU5QSVFNCVCRCU5OSVFNyU5QSU4NCVFRiVCQyU4OCVFNiU4OCU5NiVFOCU4MCU4NSVFNSVCMCU5MSVFNCVCQSU4RSVFOCVBNiU4MSVFNiVCMSU4MiVFNyU5QSU4NCVFRiVCQyU4OSVFNSU4RiU4MiVFNiU5NSVCMCVFRiVCQyU4QyVFNiU5OCVBRiVFNCVCOCU4RCVFOCVBMiVBQiVFNSU4NSU4MSVFOCVBRSVCOCVFNyU5QSU4NCUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIybWFyayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJib2xkJTIyJTJDJTIyZGF0YSUyMiUzQSU3QiU3RCU3RCU1RCU3RCU1RCU3RCU1RCU3RCU1RCU3RA=="> <span style="color: rgba(0, 0, 0, 1)"> 2. 函数表达式定义</span></span></p>
<div class="codeLine-a3169fbc" data-key="22233">
<div class="cnblogs_code">
<pre>let mySum: (x: number, y: number) => number =<span style="color: rgba(0, 0, 0, 1)"> function (x: number, y: number): number {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> x +<span style="color: rgba(0, 0, 0, 1)"> y;
};</span></pre>
</div>
<p class="blockParagraph-544a408c" style="margin-left: 30px" data-key="22244"><span class="text-4505230f--TextH400-3033861f--textContentFamily-49a318e1"><span data-key="22239"><span data-offset-key="22239:0">注意不要混淆了 TypeScript 中的 <span data-offset-key="22239:1"><code class="code-81e98f88" data-slate-leaf="true">=></code><span data-offset-key="22239:2"> 和 ES6 中的 <span data-offset-key="22239:3"><code class="code-81e98f88" data-slate-leaf="true">=></code><span data-offset-key="22239:4">。</span></span></span></span></span></span></span></p>
<p class="blockParagraph-544a408c" style="margin-left: 30px" data-key="22248" data-slate-fragment="JTdCJTIyb2JqZWN0JTIyJTNBJTIyZG9jdW1lbnQlMjIlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJwYXJhZ3JhcGglMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiVFNiVCMyVBOCVFNiU4NCU4RiVFNCVCOCU4RCVFOCVBNiU4MSVFNiVCNyVCNyVFNiVCNyU4NiVFNCVCQSU4NiUyMFR5cGVTY3JpcHQlMjAlRTQlQjglQUQlRTclOUElODQlMjAlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCU3RCUyQyU3QiUyMm9iamVjdCUyMiUzQSUyMmxlYWYlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJTNEJTNFJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJtYXJrJTIyJTJDJTIydHlwZSUyMiUzQSUyMmNvZGUlMjIlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTdEJTVEJTdEJTJDJTdCJTIyb2JqZWN0JTIyJTNBJTIybGVhZiUyMiUyQyUyMnRleHQlMjIlM0ElMjIlMjAlRTUlOTIlOEMlMjBFUzYlMjAlRTQlQjglQUQlRTclOUElODQlMjAlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCU3RCUyQyU3QiUyMm9iamVjdCUyMiUzQSUyMmxlYWYlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJTNEJTNFJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJtYXJrJTIyJTJDJTIydHlwZSUyMiUzQSUyMmNvZGUlMjIlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTdEJTVEJTdEJTJDJTdCJTIyb2JqZWN0JTIyJTNBJTIybGVhZiUyMiUyQyUyMnRleHQlMjIlM0ElMjIlRTMlODAlODIlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCU3RCU1RCU3RCU1RCU3RCUyQyU3QiUyMm9iamVjdCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIydHlwZSUyMiUzQSUyMnBhcmFncmFwaCUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIydGV4dCUyMiUyQyUyMmxlYXZlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMmxlYWYlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJUU1JTlDJUE4JTIwVHlwZVNjcmlwdCUyMCVFNyU5QSU4NCVFNyVCMSVCQiVFNSU5RSU4QiVFNSVBRSU5QSVFNCVCOSU4OSVFNCVCOCVBRCVFRiVCQyU4QyUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTJDJTdCJTIyb2JqZWN0JTIyJTNBJTIybGVhZiUyMiUyQyUyMnRleHQlMjIlM0ElMjIlM0QlM0UlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMm1hcmslMjIlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZSUyMiUyQyUyMmRhdGElMjIlM0ElN0IlN0QlN0QlNUQlN0QlMkMlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUyMCVFNyU5NCVBOCVFNiU5RCVBNSVFOCVBMSVBOCVFNyVBNCVCQSVFNSU4NyVCRCVFNiU5NSVCMCVFNyU5QSU4NCVFNSVBRSU5QSVFNCVCOSU4OSVFRiVCQyU4QyVFNSVCNyVBNiVFOCVCRSVCOSVFNiU5OCVBRiVFOCVCRSU5MyVFNSU4NSVBNSVFNyVCMSVCQiVFNSU5RSU4QiVFRiVCQyU4QyVFOSU5QyU4MCVFOCVBNiU4MSVFNyU5NCVBOCVFNiU4QiVBQyVFNSU4RiVCNyVFNiU4QiVBQyVFOCVCNSVCNyVFNiU5RCVBNSVFRiVCQyU4QyVFNSU4RiVCMyVFOCVCRSVCOSVFNiU5OCVBRiVFOCVCRSU5MyVFNSU4NyVCQSVFNyVCMSVCQiVFNSU5RSU4QiVFMyU4MCU4MiUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTVEJTdE"><span class="text-4505230f--TextH400-3033861f--textContentFamily-49a318e1"><span data-key="22245"><span data-offset-key="22245:0">在 TypeScript 的类型定义中,<span data-offset-key="22245:1"><code class="code-81e98f88" data-slate-leaf="true">=></code><span data-offset-key="22245:2"> 用来表示函数的定义,左边是输入类型,需要用括号括起来,右边是输出类型。</span></span></span></span></span></p>
<span data-key="22232"><span data-offset-key="22232:0"><span class="prism-token tokenkeyword "> 3. <span data-slate-fragment="JTdCJTIyb2JqZWN0JTIyJTNBJTIyZG9jdW1lbnQlMjIlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJoZWFkaW5nLTElMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiVFNyU5NCVBOCVFNiU4RSVBNSVFNSU4RiVBMyVFNSVBRSU5QSVFNCVCOSU4OSVFNSU4NyVCRCVFNiU5NSVCMCVFNyU5QSU4NCVFNSVCRCVBMiVFNyU4QSVCNiUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTVEJTdE">用接口定义函数的形状</span></span></span></span></div>
<div class="codeLine-a3169fbc" data-key="22233"><span data-key="22232"><span data-key="22232"><span data-offset-key="22232:0"><span class="prism-token tokenkeyword "> </span></span></span></span>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">interface</span><span style="color: rgba(0, 0, 0, 1)"> SearchFunc {
(source: </span><span style="color: rgba(0, 0, 255, 1)">string</span>, subString: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">): boolean;
}
let mySearch: SearchFunc;
mySearch </span>= function(source: <span style="color: rgba(0, 0, 255, 1)">string</span>, subString: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> source.search(subString) !== -<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">;
}</span></pre>
</div>
<h2>类(class)</h2>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 类(class)相当于ES5中的构造函数</span>
<span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> Person{
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 声明静态属性</span>
<span style="color: rgba(0, 0, 255, 1)">static</span> version:<span style="color: rgba(0, 0, 255, 1)">string</span>=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">V1.0.0</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)">声明成员属性; 并进行数据类型的约束</span>
name:<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
age:number;
sex:</span><span style="color: rgba(0, 0, 255, 1)">string</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)">构造函数,做一些初始化的事,比如给成员属性赋值</span>
<span style="color: rgba(0, 0, 0, 1)"> constructor(props){
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">成员属性赋值</span>
<span style="color: rgba(0, 0, 255, 1)">this</span>.name=<span style="color: rgba(0, 0, 0, 1)">props.name;
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.age=<span style="color: rgba(0, 0, 0, 1)">props.age;
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.sex=<span style="color: rgba(0, 0, 0, 1)">props.sex;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">声明成员方法1</span>
<span style="color: rgba(0, 0, 0, 1)"> sayName(){
console.log(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">My name is </span><span style="color: rgba(128, 0, 0, 1)">'</span>+<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.name);
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">声明成员方法2</span>
<span style="color: rgba(0, 0, 0, 1)"> dance(){
console.log(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">我会跳新疆舞</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)"> 静态成员方法</span>
<span style="color: rgba(0, 0, 255, 1)">static</span> sayHi():<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">{
console.log(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">hello world!!!</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">hello world!!</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)">创建实例:和js中一样</span>
let p1=<span style="color: rgba(0, 0, 255, 1)">new</span> Person({name:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">zs</span><span style="color: rgba(128, 0, 0, 1)">'</span>,age:<span style="color: rgba(128, 0, 128, 1)">10</span>,sex:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">男</span><span style="color: rgba(128, 0, 0, 1)">'</span>})</pre>
</div>
<h3>类的继承(extends)</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">通过extends语法结构继承Person类的属性和方法</span>
<span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> Student extends Person{
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">声明自己独有的成员属性; 并进行数据类型的约束</span>
addr:<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
constructor(props){
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">必须在此处使用super()先调用父类的构造函数</span>
<span style="color: rgba(0, 0, 0, 1)"> super(props);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">属性赋值</span>
<span style="color: rgba(0, 0, 255, 1)">this</span>.addr=<span style="color: rgba(0, 0, 0, 1)">props.addr
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">添加自己独有的成员方法</span>
<span style="color: rgba(0, 0, 0, 1)"> hobby(){
console.log(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">爱生活,爱代码</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)">创建实例对象</span>
let s1=<span style="color: rgba(0, 0, 255, 1)">new</span> Student({name:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">ls</span><span style="color: rgba(128, 0, 0, 1)">'</span>,age:<span style="color: rgba(128, 0, 128, 1)">10</span>,sex:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">女</span><span style="color: rgba(128, 0, 0, 1)">'</span>,addr:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">中国西安</span><span style="color: rgba(128, 0, 0, 1)">'</span>});</pre>
</div>
<p> </p>
<h1 class="reset-3c756112--pageTitle-33dc39a3"><span class="text-4505230f--DisplayH900-bfb998fa--textContentFamily-49a318e1">类型别名</span></h1>
<p><span class="text-4505230f--DisplayH900-bfb998fa--textContentFamily-49a318e1"><span data-slate-fragment="JTdCJTIyb2JqZWN0JTIyJTNBJTIyZG9jdW1lbnQlMjIlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJwYXJhZ3JhcGglMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiVFNyVCMSVCQiVFNSU5RSU4QiVFNSU4OCVBQiVFNSU5MCU4RCVFNyU5NCVBOCVFNiU5RCVBNSVFNyVCQiU5OSVFNCVCOCU4MCVFNCVCOCVBQSVFNyVCMSVCQiVFNSU5RSU4QiVFOCVCNSVCNyVFNCVCOCVBQSVFNiU5NiVCMCVFNSU5MCU4RCVFNSVBRCU5NyVFMyU4MCU4MiUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTVEJTdE">类型别名用来给一个类型起个新名字。</span></span></p>
<div class="cnblogs_code">
<pre>type Name = <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
type NameResolver </span>= () => <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
type NameOrResolver </span>= Name |<span style="color: rgba(0, 0, 0, 1)"> NameResolver;
function getName(n: NameOrResolver): Name {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">typeof</span> n === <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">string</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> n;
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> n();
}
}</span></pre>
</div>
<h1 class="reset-3c756112--pageTitle-33dc39a3"><span class="text-4505230f--DisplayH900-bfb998fa--textContentFamily-49a318e1">字符串字面量类型</span></h1>
<p><span class="text-4505230f--DisplayH900-bfb998fa--textContentFamily-49a318e1"><span data-slate-fragment="JTdCJTIyb2JqZWN0JTIyJTNBJTIyZG9jdW1lbnQlMjIlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJwYXJhZ3JhcGglMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiVFNSVBRCU5NyVFNyVBQyVBNiVFNCVCOCVCMiVFNSVBRCU5NyVFOSU5RCVBMiVFOSU4NyU4RiVFNyVCMSVCQiVFNSU5RSU4QiVFNyU5NCVBOCVFNiU5RCVBNSVFNyVCQSVBNiVFNiU5RCU5RiVFNSU4RiU5NiVFNSU4MCVCQyVFNSU4RiVBQSVFOCU4MyVCRCVFNiU5OCVBRiVFNiU5RiU5MCVFNSU4NyVBMCVFNCVCOCVBQSVFNSVBRCU5NyVFNyVBQyVBNiVFNCVCOCVCMiVFNCVCOCVBRCVFNyU5QSU4NCVFNCVCOCU4MCVFNCVCOCVBQSVFMyU4MCU4MiUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTVEJTdE">字符串字面量类型用来约束取值只能是某几个字符串中的一个。</span></span></p>
<div class="cnblogs_code">
<pre>type EventNames = <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(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">scroll</span><span style="color: rgba(128, 0, 0, 1)">'</span> | <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">mousemove</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
function handleEvent(ele: Element, </span><span style="color: rgba(0, 0, 255, 1)">event</span><span style="color: rgba(0, 0, 0, 1)">: EventNames) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> do something</span>
<span style="color: rgba(0, 0, 0, 1)">}
handleEvent(document.getElementById(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">hello</span><span style="color: rgba(128, 0, 0, 1)">'</span>), <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">scroll</span><span style="color: rgba(128, 0, 0, 1)">'</span>);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 没问题</span>
handleEvent(document.getElementById(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">world</span><span style="color: rgba(128, 0, 0, 1)">'</span>), <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">dbclick</span><span style="color: rgba(128, 0, 0, 1)">'</span>); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 报错,event 不能为 'dbclick'
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> index.ts(7,47): error TS2345: Argument of type '"dbclick"' is not assignable to parameter of type 'EventNames'.</span></pre>
</div>
<p><span data-offset-key="86179c558ea147629b0461a3ffd5cfd9:0">使用 <span data-offset-key="86179c558ea147629b0461a3ffd5cfd9:1"><code class="code-81e98f88" data-slate-leaf="true">type</code><span data-offset-key="86179c558ea147629b0461a3ffd5cfd9:2"> 定了一个字符串字面量类型 <span data-offset-key="86179c558ea147629b0461a3ffd5cfd9:3"><code class="code-81e98f88" data-slate-leaf="true">EventNames</code><span data-offset-key="86179c558ea147629b0461a3ffd5cfd9:4" data-slate-fragment="JTdCJTIyb2JqZWN0JTIyJTNBJTIyZG9jdW1lbnQlMjIlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJibG9jayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJwYXJhZ3JhcGglMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMm9iamVjdCUyMiUzQSUyMnRleHQlMjIlMkMlMjJsZWF2ZXMlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJsZWFmJTIyJTJDJTIydGV4dCUyMiUzQSUyMiVFNCVCRCVCRiVFNyU5NCVBOCUyMCUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTJDJTdCJTIyb2JqZWN0JTIyJTNBJTIybGVhZiUyMiUyQyUyMnRleHQlMjIlM0ElMjJ0eXBlJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlN0IlMjJvYmplY3QlMjIlM0ElMjJtYXJrJTIyJTJDJTIydHlwZSUyMiUzQSUyMmNvZGUlMjIlMkMlMjJkYXRhJTIyJTNBJTdCJTdEJTdEJTVEJTdEJTJDJTdCJTIyb2JqZWN0JTIyJTNBJTIybGVhZiUyMiUyQyUyMnRleHQlMjIlM0ElMjIlMjAlRTUlQUUlOUElRTQlQkElODYlRTQlQjglODAlRTQlQjglQUElRTUlQUQlOTclRTclQUMlQTYlRTQlQjglQjIlRTUlQUQlOTclRTklOUQlQTIlRTklODclOEYlRTclQjElQkIlRTUlOUUlOEIlMjAlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCU3RCUyQyU3QiUyMm9iamVjdCUyMiUzQSUyMmxlYWYlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyRXZlbnROYW1lcyUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTdCJTIyb2JqZWN0JTIyJTNBJTIybWFyayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJjb2RlJTIyJTJDJTIyZGF0YSUyMiUzQSU3QiU3RCU3RCU1RCU3RCUyQyU3QiUyMm9iamVjdCUyMiUzQSUyMmxlYWYlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJUVGJUJDJThDJUU1JUFFJTgzJUU1JThGJUFBJUU4JTgzJUJEJUU1JThGJTk2JUU0JUI4JTg5JUU3JUE3JThEJUU1JUFEJTk3JUU3JUFDJUE2JUU0JUI4JUIyJUU0JUI4JUFEJUU3JTlBJTg0JUU0JUI4JTgwJUU3JUE3JThEJUUzJTgwJTgyJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlN0QlNUQlN0QlNUQlN0QlNUQlN0Q=">,它只能取三种字符串中的一种。取其余的会报错</span></span></span></span></span></p>
</div>
<p><br>参考文章:TypeScript 入门教程 https://ts.xcatliu.com/</p>
<p> TypeScript 官方指南 https://www.tslang.cn/docs/handbook/basic-types.html</p>
<p> </p><br><br>
来源:https://www.cnblogs.com/hanguidong/p/11969535.html
頁:
[1]