TypeScript简单介绍
<p class="nav-list-item"> </p><div class="post">
<h1 class="post-title">TypeScript简单介绍</h1>
<div class="post-content">
<h3 id="1-0-TypeScript语言简单说明">1.0 TypeScript语言简单说明</h3>
<p><strong>简单说明</strong></p>
<p><code>TypeScript</code>是微软2012年推出的一种编程语言,属于 JavaScript 的超集,可以编译为 JavaScript 执行。它最大特点是强大的类型系统和对ES6的支持,TypeScript托管于GitHub上面。</p>
<p>TypeScript代码,通过编译可以转换为纯正的 JavaScript代码,且编译出来的 JavaScript代码能够运行在任何浏览器上。TypeScript 的编译工具也可以运行在任何服务器和任何系统上。</p>
<p><strong>设计目标</strong></p>
<p>TypeScript从一开始就提出了自己的设计目标,主要如下:</p>
<ul>
<li><code>遵循当前以及未来出现的ECMAScript规范</code>。</li>
<li>为大型项目提供构建机制(通过Class 、接口和模块等支撑)。</li>
<li>兼容现存的JavaScript代码,即任何合法的JavaScript程序都是合法的typeScript程序。</li>
<li>对于发行版本的代码没有运行开销。(使用过程可以简单划分为程序设计阶段和执行阶段)。</li>
<li>成为跨平台的开发工具,TypeScript使用Apache作为开源协议,且能够在所有主流的操作系统上安装和执行。</li>
</ul>
<p><strong>TypeScript的优势</strong></p>
<blockquote><ol>
<li>拥有活跃的社区支持和生态</li>
<li>增加了代码的可读性和可维护性</li>
<li>拥抱 ES6 规范,也支持ES7 草案的规范</li>
<li>TypeScript本身非常包容,兼容所有现行的JavaScript代码</li>
</ol></blockquote>
<p><strong>TypeScript的劣势</strong></p>
<blockquote><ol>
<li>短期投入到工作可能增加开发成本</li>
<li>集成到自动构建流程中需要额外的工作量</li>
<li>学习需要成本,需要理解接口、Class、泛型等知识</li>
</ol></blockquote>
<p><strong>关于TypeScript更多信息,请参考</strong><span style="color: rgba(0, 128, 0, 1)"><span style="color: rgba(0, 128, 0, 1)">TypeScript官网</span></span>和<span style="color: rgba(0, 128, 0, 1)"><span style="color: rgba(0, 128, 0, 1)">TypeScript中文网站</span></span>或<span style="color: rgba(0, 128, 0, 1)"><span style="color: rgba(0, 128, 0, 1)">TypeScript Github托管仓库</span></span>。</p>
<h3 id="2-0-开发环境和工具支持">2.0 开发环境和工具支持</h3>
<p><strong>命令行工具</strong></p>
<p>安装命令:<code>$ npm install -g typescript</code></p>
<p>-g表示全局安装,上面的命令执行后会在全局环境下安装 tsc 命令。</p>
<p>查看版本信息命令:<code>$ tsc --version</code></p>
<p>可以通过<code>$ tsc --help</code>来查看tsc使用帮助,通过<code>$ tsc --version</code>命令来查看tsc版本验证是否安装成功,当前最新的版本为<code>Version 2.9.1</code>,安装成功后我们就可以在任何地方来执行 tsc 命令了。</p>
<div class="tip">typeScript文件的后缀为.ts。</div>
<p>我们可以通过在命令行中输入<code>$ tsc xxx.ts</code>命令来把文件编译为JavaScript文件,上述命令中xxx为对应文件的名称,编译完成后将得到xxx.js文件。</p>
<p><strong>编辑器使用</strong></p>
<p><code>主流的编辑器都支持 TypeScript</code>。下面列出推荐的编辑器(点击获取编辑器或IDE对TypeScript的支持)</p>
<blockquote>
<p><span style="color: rgba(0, 128, 0, 1)"><span style="color: rgba(0, 128, 0, 1)">Atom</span> </span>21世纪黑客文本编辑器(拥有众多强大插件)<br><span style="color: rgba(0, 128, 0, 1)"><span style="color: rgba(0, 128, 0, 1)">WebStorm</span></span> 强大的前端开发编辑器<br><span style="color: rgba(0, 128, 0, 1)"><span style="color: rgba(0, 128, 0, 1)">Visual Studio Code</span></span> 内置了TypeScript支持,且本身也由TypeScript实现。</p>
</blockquote>
<h3 id="3-0-TypeScript组件">3.0 TypeScript组件</h3>
<p>TypeScript语言内部被划分为三层,每层又被一次划分为子层或者是组件。</p>
<p><br><img src="https://img2020.cnblogs.com/blog/1891339/202008/1891339-20200828151832959-1880436020.png"></p>
<p><code>TypeScript语言内部的每一层都有自己不同的用途。</code></p>
<blockquote>
<p><strong>语言层</strong>:实现所有TypeScript的语言特性。<br><strong>编译层</strong>:执行编译和类型检查操作,并把代码转换为JavaScript。<br><strong>语言服务层</strong>:生成信息以帮助编辑器或其它开发工具提供更好的辅助特性。</p>
</blockquote>
<h3 class="tip"><span style="font-size: 1.17em">4.0 基本的数据类型</span></h3>
</div>
</div>
<div class="copyright"> 像JavaScript,TypeScrip也有自己的数据类型,数据类型和JavaScript只是稍有不同,主要有</div>
<div class="copyright"><span style="color: rgba(30, 144, 255, 1)"><strong>布尔类型(boolean)、数值类型(number)、字符串类型(string)、数组类型(array)、void类型以及枚举类型</strong>。</span></div>
<div class="copyright">
<p><span style="background-color: rgba(255, 255, 255, 1); color: rgba(153, 51, 102, 1); font-size: 15px"><strong>数值(number)</strong></span><br>数值类型等同于JavaScript中的number类型,在TypeScript中所有的数字都是浮点数,它们全部都是number类型的。</p>
<p>除了支持十进制和十六进制字面量,TypeScript还支持ECMAScript 2015中引入的二进制和八进制字面量。</p>
<div class="cnblogs_code">
<pre><span class="hljs-keyword" style="font-size: 14px">let decLiteral: <span class="hljs-built_in">number = <span class="hljs-number">6; <br><span class="hljs-keyword">let hexLiteral: <span class="hljs-built_in">number = <span class="hljs-number">0xf00d; <br><span class="hljs-keyword">let binaryLiteral: <span class="hljs-built_in">number = <span class="hljs-number">0b1010;<br><span class="hljs-keyword">let octalLiteral: <span class="hljs-built_in">number = <span class="hljs-number">0o744;</span></span></span></span></span></span></span></span></span></span></span></span></pre>
</div>
<p> </p>
<p><span style="color: rgba(153, 51, 102, 1); font-size: 15px"><strong>字符串(string)</strong></span><br>连续的一个或多个字符,在代码中需要使用单引号或双引号包住,可以交叉。</p>
<div class="cnblogs_code">
<pre><span style="font-size: 14px">let name: string = "bob"<span style="color: rgba(0, 0, 0, 1)">;
name </span>= "smith";<br><br><span style="color: rgba(51, 153, 102, 1)">//还可以使用<em>模版字符串</em>,它可以定义多行文本和内嵌表达式。 这种字符串是被反引号包围( <code>`</code>),并且以<code>${ expr }</code>这种形式嵌入表达式</span><br></span></pre>
<pre><span style="font-size: 14px"><code class="language-ts hljs typescript"><span class="hljs-keyword">let name: <span class="hljs-built_in">string = <span class="hljs-string">`Gene`;
<span class="hljs-keyword">let age: <span class="hljs-built_in">number = <span class="hljs-number">37;
<span class="hljs-keyword">let sentence: <span class="hljs-built_in">string = <span class="hljs-string">`Hello, my name is <span class="hljs-subst">${ name }.
I'll be <span class="hljs-subst">${ age + 1 } years old next month.`;</span></span></span></span></span></span></span></span></span></span></span></code></span></pre>
</div>
<p> </p>
<p><span style="color: rgba(153, 51, 102, 1); font-size: 15px"><strong>布尔类型(boolean)</strong></span><br>布尔类型有两个可选的值,true或false。</p>
<div class="cnblogs_code">
<pre><span style="font-size: 14px">let bool1:<span style="color: rgba(0, 0, 255, 1)">boolean</span> = <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
let bool2:</span><span style="color: rgba(0, 0, 255, 1)">boolean</span> = <span style="color: rgba(0, 0, 255, 1)">false</span>;</span></pre>
</div>
<p> </p>
<p><span style="color: rgba(153, 51, 102, 1); font-size: 15px"><strong>数组类型(array)</strong></span><br>TypeScript中的数组类型和JavaScript不太一样。数组类型在声明的时候比较特殊,通常有两种声明方式:<code>关键字 数组名:类型[]</code>或者<code>关键字 数组名:Array<类型></code>后一种格式被称为泛型,后面会专门介绍。 </p>
<div class="cnblogs_code">
<p><span style="font-size: 14px">let list: number[] = ;</span><br><span style="color: rgba(51, 153, 102, 1); font-size: 14px">//第二种方式是使用数组泛型,Array<元素类型>:</span><br><span style="font-size: 14px">let list: Array<number> = ;</span></p>
</div>
<p> </p>
<p><span style="color: rgba(153, 51, 102, 1); font-size: 15px"><strong>枚举类型(enum)</strong></span><br>枚举类型和其他面向对象语言中保持一致。我们可以通过<code>enum 类型名{选项1,选项2,选项3,···}</code>的方式来定义,枚举类型中的成员默认从0开始依次递增。</p>
<div class="cnblogs_code">
<pre><span style="font-size: 14px"><span style="color: rgba(0, 0, 0, 1)">enum Color {Red, Green, Blue}
let c: Color </span>=<span style="color: rgba(0, 0, 0, 1)"> Color.Blue;
console.log(c); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">打印的结果为2,每个选项从0开始依次递增</span><span style="color: rgba(0, 128, 0, 1)">
//</span><span style="color: rgba(0, 128, 0, 1)">默认情况下,从0开始为元素编号。 你也可以手动的指定成员的数值。 例如,我们将上面的例子改成从 1开始编号:</span>
<span style="color: rgba(0, 0, 0, 1)">
enum Color {Red </span>= 1<span style="color: rgba(0, 0, 0, 1)">, Green, Blue}
let c: Color </span>= Color.Green;</span></pre>
</div>
<p> </p>
<p><span style="color: rgba(153, 51, 102, 1); font-size: 15px"><strong>元组 Tuple</strong></span><br>元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同。 比如,你可以定义一对值分别为 string和number类型的元组。</p>
<div class="cnblogs_code">
<pre><span style="font-size: 14px"><span style="color: rgba(51, 153, 102, 1)">//</span><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(51, 153, 102, 1)"> Declare a tuple type</span>
let x: ;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Initialize it</span>
x = ['hello', 10]; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> OK</span><span style="color: rgba(0, 128, 0, 1)">
//</span><span style="color: rgba(0, 128, 0, 1)"> Initialize it incorrectly</span>
x = ; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Error</span></span></pre>
</div>
<p><span style="color: rgba(0, 0, 0, 1)">枚举类型提供的一个便利是你可以由枚举的值得到它的名字。 例如,我们知道数值为2,但是不确定它映射到Color里的哪个名字,我们可以查找相应的名字:</span></p>
<div class="cnblogs_code">
<pre><span style="font-size: 14px">enum Color {Red = 1<span style="color: rgba(0, 0, 0, 1)">, Green, Blue}
let colorName: string </span>= Color;
console.log(colorName);</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 显示'Green'因为上面代码里它的值是2</span></span></pre>
</div>
<p> </p>
<p><span style="color: rgba(153, 51, 102, 1); font-size: 15px"><strong>void类型</strong></span><br>void类型在所有类型都不存在的时候使用,是any类型的反面。</p>
<div class="cnblogs_code">
<pre><span style="font-size: 14px"><span style="color: rgba(0, 0, 255, 1)">function</span> warnUser(): <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> {
console.log(</span>"This is my warning message"<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>
<span style="color: rgba(0, 0, 0, 1)">
let unusable: </span><span style="color: rgba(0, 0, 255, 1)">void</span> = undefined;</span></pre>
</div>
<p> </p>
<p style="text-align: left"><span style="color: rgba(153, 51, 102, 1); font-size: 15px"><strong>any类型</strong></span><br>有时候,我们会想要为那些在编程阶段还不清楚类型的变量指定一个类型。 这些值可能来自于动态的内容,比如来自用户输入或第三方代码库。 这种情况下,我们不希望类型检查器对这些值进行检</p>
<p style="text-align: left">查而是直接让它们通过编译阶段的检查。 那么我们可以使用 <code>any</code>类型来标记这些变量</p>
<div class="cnblogs_code">
<pre><span style="font-size: 14px">let any1 ; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">声明变量的时候没有进行初始化操作,无法通过类型推导得出真实类型,通常总是设置为any类型</span>
let any2:any = "我现在是字符串"; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">如果某个变量其类型可能会变化,建议使用any类型</span>
any2 = <span style="color: rgba(0, 0, 255, 1)">false</span>;</span></pre>
</div>
<p> </p>
<p><span style="color: rgba(153, 51, 102, 1); font-size: 15px"><strong>Null 和 Undefined</strong></span></p>
<p><span>TypeScript里,<code>undefined</code>和<code>null</code>两者各自有自己的类型分别叫做<code>undefined</code>和<code>null</code>。 和 <code>void</code>相似,它们的本身的类型用处不是很大:</span></p>
<div class="cnblogs_code">
<pre><span style="font-size: 14px"><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Not much else we can assign to these variables!</span>
let u: undefined =<span style="color: rgba(0, 0, 0, 1)"> undefined;
let n: </span><span style="color: rgba(0, 0, 255, 1)">null</span> = <span style="color: rgba(0, 0, 255, 1)">null</span>;</span></pre>
</div>
<p> </p>
<p> </p>
</div><br><br>
来源:https://www.cnblogs.com/zienlove/p/13570493.html
頁:
[1]