桑吉 發表於 2020-2-22 22:29:00

Typescript语法简单汇总

<p><strong>1、Typescript原始数据类型:</strong></p>
<p>string</p>
<p>number</p>
<p>boolean</p>
<p>null</p>
<p>undefined</p>
<p>enum</p>
<p>symbol</p>
<p>空值一般采用void表示,void可以表示变量,也可以表示函数返回值。</p>
<p><strong>2、Typescript中的任意值:</strong></p>
<p>任意值(any)用来表示允许赋值为任意类型。</p>
<p>申明一个变量为任意值后,对它的任何操作,返回的内容的类型都是任意值。</p>
<p>变量如果在申明的时候如果未指定其类型,那么它会被识别为任意值类型。</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-widget-wrapper="1" data-cke-filter="off" data-cke-display-name="代码段" data-cke-widget-id="16">
<pre class="cke_widget_element" data-cke-widget-data="{&amp;quot;lang&amp;quot;:&amp;quot;javascript&amp;quot;,&amp;quot;code&amp;quot;:&amp;quot;let a; // a是任意类型\na = 5;\na = 'a';\n\nconsole.log(a);&amp;quot;,&amp;quot;classes&amp;quot;:[]}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet"><code class="language-javascript hljs"><span class="hljs-keyword">let a; <span class="hljs-comment">// a是任意类型
a = <span class="hljs-number">5;
a = <span class="hljs-string">'a';

<span class="hljs-built_in">console.log(a);</span></span></span></span></span></code></pre>
<span class="cke_reset cke_widget_drag_handler_container"><img class="cke_reset cke_widget_drag_handler lazyload" title="点击并拖拽以移动" alt="" width="15" height="15" data-cke-widget-drag-handler="1" data-src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw=="></span></div>
<p><strong>3、Typescript的类型推论:</strong></p>
<p>Typescript会依照类型推论的规则推断出一个类型。</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-widget-wrapper="1" data-cke-filter="off" data-cke-display-name="代码段" data-cke-widget-id="15">
<pre class="cke_widget_element" data-cke-widget-data="{&amp;quot;lang&amp;quot;:&amp;quot;javascript&amp;quot;,&amp;quot;code&amp;quot;:&amp;quot;let b = 1; // b是number类型\nb = 2;\nconsole.log(b);&amp;quot;,&amp;quot;classes&amp;quot;:[]}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet"><code class="language-javascript hljs"><span class="hljs-keyword">let b = <span class="hljs-number">1; <span class="hljs-comment">// b是number类型
b = <span class="hljs-number">2;
<span class="hljs-built_in">console.log(b);</span></span></span></span></span></code></pre>
<span class="cke_reset cke_widget_drag_handler_container"><img class="cke_reset cke_widget_drag_handler lazyload" title="点击并拖拽以移动" alt="" width="15" height="15" data-cke-widget-drag-handler="1" data-src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw=="></span></div>
<p>如果定义的时候没有赋值,不管之后有没有被赋值,都会被推断出any类型而完全不被类型检查。</p>
<p><strong>4、Typescript联合类型:</strong></p>
<p>联合类型表示取值可以为多种类型中的一种。</p>
<p>只能访问此联合类型内的所有类型里共有的属性和方法。</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-widget-wrapper="1" data-cke-filter="off" data-cke-display-name="代码段" data-cke-widget-id="14">
<pre class="cke_widget_element" data-cke-widget-data="{&amp;quot;lang&amp;quot;:&amp;quot;javascript&amp;quot;,&amp;quot;code&amp;quot;:&amp;quot;const a: string | number = 1;\nconsole.log(a.length); // 报错:Property 'length' does not exist on type 'number'\nconsole.log(a.toString());&amp;quot;,&amp;quot;classes&amp;quot;:[]}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet"><code class="language-javascript hljs"><span class="hljs-keyword">const a: string | number = <span class="hljs-number">1;
<span class="hljs-built_in">console.log(a.length); <span class="hljs-comment">// 报错:Property 'length' does not exist on type 'number'
<span class="hljs-built_in">console.log(a.toString());</span></span></span></span></span></code></pre>
<span class="cke_reset cke_widget_drag_handler_container"><img class="cke_reset cke_widget_drag_handler lazyload" title="点击并拖拽以移动" alt="" width="15" height="15" data-cke-widget-drag-handler="1" data-src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw=="></span></div>
<p><strong>5、Typescript中对象类型-接口:</strong></p>
<p>可描述类的一部分抽象行为,也可描述对象的结构形状。</p>
<p>接口一般首字母大些,有的编程语言建议接口的名称前加上“I”前缀。</p>
<p>赋值的时候变量的形状必须跟接口的形状保持一致。</p>
<p>接口中可定义可选属性,只读属性,任意属性。</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-widget-wrapper="1" data-cke-filter="off" data-cke-display-name="代码段" data-cke-widget-id="13">
<pre class="cke_widget_element" data-cke-widget-data="{&amp;quot;lang&amp;quot;:&amp;quot;javascript&amp;quot;,&amp;quot;code&amp;quot;:&amp;quot;\ninterface Istate1 {\n    name: string;\n    age: number;\n}\n\nconst obj1: Istate1 = {\n    name: \&amp;quot;Tom\&amp;quot;,\n    age: 10\n}\n\n// 可选属性\ninterface Istate2 {\n    name: string;\n    age?: number;\n}\n\nconst obj2: Istate2 = {\n    name: \&amp;quot;张三\&amp;quot;,\n    age: 18\n}\n\nconst obj3: Istate2 = {\n    name: \&amp;quot;李四\&amp;quot;\n}\n\n// 属性个数不确定的时候, any必须是任意类型\ninterface Istate3 {\n    name: string|number;\n    age?: number;\n    : any;\n}\n\nconst obj33: Istate3 = {\n    name: 'Jay',\n    age: 20,\n    sex: \&amp;quot;men\&amp;quot;,\n    isMary: false\n}&amp;quot;,&amp;quot;classes&amp;quot;:[]}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet"><code class="language-javascript hljs">
interface Istate1 {
    <span class="hljs-attr">name: string;
    age: number;
}

<span class="hljs-keyword">const obj1: Istate1 = {
    <span class="hljs-attr">name: <span class="hljs-string">"Tom",
    <span class="hljs-attr">age: <span class="hljs-number">10
}

<span class="hljs-comment">// 可选属性
interface Istate2 {
    <span class="hljs-attr">name: string;
    age?: number;
}

<span class="hljs-keyword">const obj2: Istate2 = {
    <span class="hljs-attr">name: <span class="hljs-string">"张三",
    <span class="hljs-attr">age: <span class="hljs-number">18
}

<span class="hljs-keyword">const obj3: Istate2 = {
    <span class="hljs-attr">name: <span class="hljs-string">"李四"
}

<span class="hljs-comment">// 属性个数不确定的时候, any必须是任意类型
interface Istate3 {
    <span class="hljs-attr">name: string|number;
    age?: number;
    : any;
}

<span class="hljs-keyword">const obj33: Istate3 = {
    <span class="hljs-attr">name: <span class="hljs-string">'Jay',
    <span class="hljs-attr">age: <span class="hljs-number">20,
    <span class="hljs-attr">sex: <span class="hljs-string">"men",
    <span class="hljs-attr">isMary: <span class="hljs-literal">false
}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<span class="cke_reset cke_widget_drag_handler_container"><img class="cke_reset cke_widget_drag_handler lazyload" title="点击并拖拽以移动" alt="" width="15" height="15" data-cke-widget-drag-handler="1" data-src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw=="></span></div>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-widget-wrapper="1" data-cke-filter="off" data-cke-display-name="代码段" data-cke-widget-id="12">
<pre class="cke_widget_element" data-cke-widget-data="{&amp;quot;lang&amp;quot;:&amp;quot;javascript&amp;quot;,&amp;quot;code&amp;quot;:&amp;quot;// 只读属性\ninterface Istate4{\n    name: string;\n    readonly age: number;\n}\n\nconst obj4: Istate4 = {\n    name: \&amp;quot;Jack\&amp;quot;,\n    age: 55\n}\n\nobj4.age = 56; // Cannot assign to 'age' because it is a read-only property.&amp;quot;,&amp;quot;classes&amp;quot;:[]}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet"><code class="language-javascript hljs"><span class="hljs-comment">// 只读属性
interface Istate4{
    <span class="hljs-attr">name: string;
    readonly age: number;
}

<span class="hljs-keyword">const obj4: Istate4 = {
    <span class="hljs-attr">name: <span class="hljs-string">"Jack",
    <span class="hljs-attr">age: <span class="hljs-number">55
}

obj4.age = <span class="hljs-number">56; <span class="hljs-comment">// Cannot assign to 'age' because it is a read-only property.</span></span></span></span></span></span></span></span></span></code></pre>
<span class="cke_reset cke_widget_drag_handler_container"><img class="cke_reset cke_widget_drag_handler lazyload" title="点击并拖拽以移动" alt="" width="15" height="15" data-cke-widget-drag-handler="1" data-src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw=="></span></div>
<p><strong>6、Typescript数组类型:</strong></p>
<p>1) 可采用"类型[]"法表示;</p>
<p>2) 可采用数组泛型“Array&lt;类型&gt;”表示法;</p>
<p>3) 可采用接口表示法。</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-widget-wrapper="1" data-cke-filter="off" data-cke-display-name="代码段" data-cke-widget-id="11">
<pre class="cke_widget_element" data-cke-widget-data="{&amp;quot;lang&amp;quot;:&amp;quot;javascript&amp;quot;,&amp;quot;code&amp;quot;:&amp;quot;// “类型[]”表示法\nconst arr1: number[] = ;\nconst arr2: string[] = [\&amp;quot;1\&amp;quot;, \&amp;quot;2\&amp;quot;, \&amp;quot;3\&amp;quot;];\nconst arr3: any[] = ;&amp;quot;,&amp;quot;classes&amp;quot;:[]}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet"><code class="language-javascript hljs"><span class="hljs-comment">// “类型[]”表示法
<span class="hljs-keyword">const arr1: number[] = [<span class="hljs-number">1, <span class="hljs-number">2, <span class="hljs-number">3, <span class="hljs-number">4, <span class="hljs-number">5];
<span class="hljs-keyword">const arr2: string[] = [<span class="hljs-string">"1", <span class="hljs-string">"2", <span class="hljs-string">"3"];
<span class="hljs-keyword">const arr3: any[] = [<span class="hljs-number">1, <span class="hljs-string">'2', <span class="hljs-literal">true];</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<span class="cke_reset cke_widget_drag_handler_container"><img class="cke_reset cke_widget_drag_handler lazyload" title="点击并拖拽以移动" alt="" width="15" height="15" data-cke-widget-drag-handler="1" data-src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw=="></span></div>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-widget-wrapper="1" data-cke-filter="off" data-cke-display-name="代码段" data-cke-widget-id="10">
<pre class="cke_widget_element" data-cke-widget-data="{&amp;quot;lang&amp;quot;:&amp;quot;javascript&amp;quot;,&amp;quot;code&amp;quot;:&amp;quot;// \&amp;quot;Array&amp;lt;类型&amp;gt;\&amp;quot;表示法\nconst arr4: Array&amp;lt;number&amp;gt; = ;\nconst arr5: Array&amp;lt;string&amp;gt; = [\&amp;quot;1\&amp;quot;, \&amp;quot;2\&amp;quot;, \&amp;quot;3\&amp;quot;];\nconst arr6: Array&amp;lt;any&amp;gt; = ;&amp;quot;,&amp;quot;classes&amp;quot;:[]}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet"><code class="language-javascript hljs"><span class="hljs-comment">// "Array&lt;类型&gt;"表示法
<span class="hljs-keyword">const arr4: <span class="hljs-built_in">Array&lt;number&gt; = [<span class="hljs-number">1, <span class="hljs-number">2, <span class="hljs-number">3];
<span class="hljs-keyword">const arr5: <span class="hljs-built_in">Array&lt;string&gt; = [<span class="hljs-string">"1", <span class="hljs-string">"2", <span class="hljs-string">"3"];
<span class="hljs-keyword">const arr6: <span class="hljs-built_in">Array&lt;any&gt; = [<span class="hljs-number">1, <span class="hljs-string">"2", <span class="hljs-literal">true];</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<span class="cke_reset cke_widget_drag_handler_container"><img class="cke_reset cke_widget_drag_handler lazyload" title="点击并拖拽以移动" alt="" width="15" height="15" data-cke-widget-drag-handler="1" data-src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw=="></span></div>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-widget-wrapper="1" data-cke-filter="off" data-cke-display-name="代码段" data-cke-widget-id="9">
<pre class="cke_widget_element" data-cke-widget-data="{&amp;quot;lang&amp;quot;:&amp;quot;javascript&amp;quot;,&amp;quot;code&amp;quot;:&amp;quot;// 接口表示法\ninterface Istate{\n    name: string;\n    age: number;\n}\n\ninterface Iarr{\n    : Istate;\n}\n\nconst arr7: Iarr = [\n    {\n      name: 'Bill',\n      age: 66\n    },\n    {\n      name: \&amp;quot;Pony\&amp;quot;,\n      age: 51\n    }\n];\n\nconst arr8: Istate[] = [\n    {\n      name: 'Bill',\n      age: 66\n    },\n    {\n      name: \&amp;quot;Pony\&amp;quot;,\n      age: 51\n    }\n];\n\nconst arr9: Array&amp;lt;Istate&amp;gt; = [\n    {\n      name: 'Bill',\n      age: 66\n    },\n    {\n      name: \&amp;quot;Pony\&amp;quot;,\n      age: 51\n    }\n];&amp;quot;,&amp;quot;classes&amp;quot;:[]}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet"><code class="language-javascript hljs"><span class="hljs-comment">// 接口表示法
interface Istate{
    <span class="hljs-attr">name: string;
    age: number;
}

interface Iarr{
    : Istate;
}

<span class="hljs-keyword">const arr7: Iarr = [
    {
      <span class="hljs-attr">name: <span class="hljs-string">'Bill',
      <span class="hljs-attr">age: <span class="hljs-number">66
    },
    {
      <span class="hljs-attr">name: <span class="hljs-string">"Pony",
      <span class="hljs-attr">age: <span class="hljs-number">51
    }
];

<span class="hljs-keyword">const arr8: Istate[] = [
    {
      <span class="hljs-attr">name: <span class="hljs-string">'Bill',
      <span class="hljs-attr">age: <span class="hljs-number">66
    },
    {
      <span class="hljs-attr">name: <span class="hljs-string">"Pony",
      <span class="hljs-attr">age: <span class="hljs-number">51
    }
];

<span class="hljs-keyword">const arr9: <span class="hljs-built_in">Array&lt;Istate&gt; = [
    {
      <span class="hljs-attr">name: <span class="hljs-string">'Bill',
      <span class="hljs-attr">age: <span class="hljs-number">66
    },
    {
      <span class="hljs-attr">name: <span class="hljs-string">"Pony",
      <span class="hljs-attr">age: <span class="hljs-number">51
    }
];</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<span class="cke_reset cke_widget_drag_handler_container"><img class="cke_reset cke_widget_drag_handler lazyload" title="点击并拖拽以移动" alt="" width="15" height="15" data-cke-widget-drag-handler="1" data-src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw=="></span></div>
<p><strong>7、Typescript函数类型:</strong></p>
<p>函数约束:有函数本身的参数约束,返回值约束;</p>
<p>还有函数本身赋值的变量的约束;</p>
<p>可采用重载的方式才支持联合类型的函数关系。</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-widget-wrapper="1" data-cke-filter="off" data-cke-display-name="代码段" data-cke-widget-id="8">
<pre class="cke_widget_element" data-cke-widget-data="{&amp;quot;lang&amp;quot;:&amp;quot;javascript&amp;quot;,&amp;quot;code&amp;quot;:&amp;quot;// 申明式类型的函数\nfunction funType(name: string, age: number): number{\n    return age;\n}\n\nconst ageNum: number = funType(\&amp;quot;Tom\&amp;quot;, 18);\n\n// 函数参数不确定\nfunction funType2(name: string, age: number, sex?: string): number{\n    return age;\n}\n\nconst age2Number = funType2(\&amp;quot;Tom\&amp;quot;, 18, \&amp;quot;男\&amp;quot;);\n\n// 函数参数的默认值\nfunction funType3(name=\&amp;quot;Tom\&amp;quot;, age=18): number{\n    return age;\n}\n\nconst age3Number = funType3();\nconsole.log(age3Number)&amp;quot;,&amp;quot;classes&amp;quot;:[]}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet"><code class="language-javascript hljs"><span class="hljs-comment">// 申明式类型的函数
<span class="hljs-function"><span class="hljs-keyword">function <span class="hljs-title">funType(<span class="hljs-params">name: string, age: number): <span class="hljs-title">number{
    <span class="hljs-keyword">return age;
}

<span class="hljs-keyword">const ageNum: number = funType(<span class="hljs-string">"Tom", <span class="hljs-number">18);

<span class="hljs-comment">// 函数参数不确定
<span class="hljs-function"><span class="hljs-keyword">function <span class="hljs-title">funType2(<span class="hljs-params">name: string, age: number, sex?: string): <span class="hljs-title">number{
    <span class="hljs-keyword">return age;
}

<span class="hljs-keyword">const age2Number = funType2(<span class="hljs-string">"Tom", <span class="hljs-number">18, <span class="hljs-string">"男");

<span class="hljs-comment">// 函数参数的默认值
<span class="hljs-function"><span class="hljs-keyword">function <span class="hljs-title">funType3(<span class="hljs-params">name=<span class="hljs-string">"Tom", age=<span class="hljs-number">18): <span class="hljs-title">number{
    <span class="hljs-keyword">return age;
}

<span class="hljs-keyword">const age3Number = funType3();
<span class="hljs-built_in">console.log(age3Number)</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<span class="cke_reset cke_widget_drag_handler_container"><img class="cke_reset cke_widget_drag_handler lazyload" title="点击并拖拽以移动" alt="" width="15" height="15" data-cke-widget-drag-handler="1" data-src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw=="></span></div>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-widget-wrapper="1" data-cke-filter="off" data-cke-display-name="代码段" data-cke-widget-id="7">
<pre class="cke_widget_element" data-cke-widget-data="{&amp;quot;lang&amp;quot;:&amp;quot;javascript&amp;quot;,&amp;quot;code&amp;quot;:&amp;quot;// 表达式类型的函数\nconst funType4 = function(name: string, age: number): number{\n    return age;\n}\n\nconst funType: (name: string, age: number) =&amp;gt; number= function(name: string, age: number): number{\n    return age;\n}\n\ninterface IfunType6{\n    (name: string, age: number): number;\n}\n\nconst funType6: IfunType6 = function(name: string, age: number): number{\n    return age;\n}&amp;quot;,&amp;quot;classes&amp;quot;:[]}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet"><code class="language-javascript hljs"><span class="hljs-comment">// 表达式类型的函数
<span class="hljs-keyword">const funType4 = <span class="hljs-function"><span class="hljs-keyword">function(<span class="hljs-params">name: string, age: number): <span class="hljs-title">number{
    <span class="hljs-keyword">return age;
}

<span class="hljs-keyword">const funType: <span class="hljs-function">(<span class="hljs-params">name: string, age: number) =&gt; number= <span class="hljs-function"><span class="hljs-keyword">function(<span class="hljs-params">name: string, age: number): <span class="hljs-title">number{
    <span class="hljs-keyword">return age;
}

interface IfunType6{
    (name: string, <span class="hljs-attr">age: number): number;
}

<span class="hljs-keyword">const funType6: IfunType6 = <span class="hljs-function"><span class="hljs-keyword">function(<span class="hljs-params">name: string, age: number): <span class="hljs-title">number{
    <span class="hljs-keyword">return age;
}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<span class="cke_reset cke_widget_drag_handler_container"><img class="cke_reset cke_widget_drag_handler lazyload" title="点击并拖拽以移动" alt="" width="15" height="15" data-cke-widget-drag-handler="1" data-src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw=="></span></div>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-widget-wrapper="1" data-cke-filter="off" data-cke-display-name="代码段" data-cke-widget-id="6">
<pre class="cke_widget_element" data-cke-widget-data="{&amp;quot;lang&amp;quot;:&amp;quot;javascript&amp;quot;,&amp;quot;code&amp;quot;:&amp;quot;// 对于联合类型的函数可以采用重载的方式\n// 输入是number,输出也是number\n// 输入是string,输出也是string\nfunction getValue(value: number): number;\nfunction getValue(value: string): string;\nfunction getValue(value: number|string): number|string{\n    return value;\n}\n\nconst a: number = getValue(1);\nconst b: string =getValue(\&amp;quot;1\&amp;quot;);\n&amp;quot;,&amp;quot;classes&amp;quot;:[]}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet"><code class="language-javascript hljs"><span class="hljs-comment">// 对于联合类型的函数可以采用重载的方式
<span class="hljs-comment">// 输入是number,输出也是number
<span class="hljs-comment">// 输入是string,输出也是string
<span class="hljs-function"><span class="hljs-keyword">function <span class="hljs-title">getValue(<span class="hljs-params">value: number): <span class="hljs-title">number;
<span class="hljs-title">function <span class="hljs-title">getValue(<span class="hljs-params">value: string): <span class="hljs-title">string;
<span class="hljs-title">function <span class="hljs-title">getValue(<span class="hljs-params">value: number|string): <span class="hljs-title">number|<span class="hljs-title">string{
    <span class="hljs-keyword">return value;
}

<span class="hljs-keyword">const a: number = getValue(<span class="hljs-number">1);
<span class="hljs-keyword">const b: string =getValue(<span class="hljs-string">"1");
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<span class="cke_reset cke_widget_drag_handler_container"><img class="cke_reset cke_widget_drag_handler lazyload" title="点击并拖拽以移动" alt="" width="15" height="15" data-cke-widget-drag-handler="1" data-src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw=="></span></div>
<p><strong>8、Typescript类型断言:</strong></p>
<p>类型断言可以用来手动指定一个值的类型。</p>
<p>语法:&lt;类型&gt;值或者值 as 类型。</p>
<p>在tsx语法(React的jsx语法的ts版)必须采用后面一种。</p>
<p>类型断言不是类型转换,断言成一个联合类型中不存在的类型是不允许的。</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-widget-wrapper="1" data-cke-filter="off" data-cke-display-name="代码段" data-cke-widget-id="5">
<pre class="cke_widget_element" data-cke-widget-data="{&amp;quot;lang&amp;quot;:&amp;quot;javascript&amp;quot;,&amp;quot;code&amp;quot;:&amp;quot;// 类型断言 只能断言联合类型中存在的类型\nfunction getAssert(name: string|number){\n    //return (&amp;lt;string&amp;gt;name).length;\n    return (name as string).length;\n}&amp;quot;,&amp;quot;classes&amp;quot;:[]}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet"><code class="language-javascript hljs"><span class="hljs-comment">// 类型断言 只能断言联合类型中存在的类型
<span class="hljs-function"><span class="hljs-keyword">function <span class="hljs-title">getAssert(<span class="hljs-params">name: string|number){
    <span class="hljs-comment">//return (&lt;string&gt;name).length;
    <span class="hljs-keyword">return (name <span class="hljs-keyword">as string).length;
}</span></span></span></span></span></span></span></span></code></pre>
<span class="cke_reset cke_widget_drag_handler_container"><img class="cke_reset cke_widget_drag_handler lazyload" title="点击并拖拽以移动" alt="" width="15" height="15" data-cke-widget-drag-handler="1" data-src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw=="></span></div>
<p><strong>9、Typescript类型别名:</strong></p>
<p>类型别名可以用来给一个类型起一个新名字。</p>
<p>采用关键字,比如“type name = string | number”。</p>
<p>例子中name就表示可以设置字符串或者数值类型。</p>
<p>也可用type来约束取值只能是某些字符串中的一个,如:</p>
<p>type eventNames = "click" | "scroll" | "mousemove"</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-widget-wrapper="1" data-cke-filter="off" data-cke-display-name="代码段" data-cke-widget-id="4">
<pre class="cke_widget_element" data-cke-widget-data="{&amp;quot;lang&amp;quot;:&amp;quot;javascript&amp;quot;,&amp;quot;code&amp;quot;:&amp;quot;// 类型别名\n//const str: string|number = \&amp;quot;1\&amp;quot;;\n\ntype strType = string | number | boolean;\nlet str: strType = \&amp;quot;1\&amp;quot;\nstr = 1;\nstr = true;\nconsole.log(str);&amp;quot;,&amp;quot;classes&amp;quot;:[]}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet"><code class="language-javascript hljs"><span class="hljs-comment">// 类型别名
<span class="hljs-comment">//const str: string|number = "1";

type strType = string | number | boolean;
<span class="hljs-keyword">let str: strType = <span class="hljs-string">"1"
str = <span class="hljs-number">1;
str = <span class="hljs-literal">true;
<span class="hljs-built_in">console.log(str);</span></span></span></span></span></span></span></code></pre>
<span class="cke_reset cke_widget_drag_handler_container"><img class="cke_reset cke_widget_drag_handler lazyload" title="点击并拖拽以移动" alt="" width="15" height="15" data-cke-widget-drag-handler="1" data-src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw=="></span></div>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-widget-wrapper="1" data-cke-filter="off" data-cke-display-name="代码段" data-cke-widget-id="3">
<pre class="cke_widget_element" data-cke-widget-data="{&amp;quot;lang&amp;quot;:&amp;quot;javascript&amp;quot;,&amp;quot;code&amp;quot;:&amp;quot;// 对于接口也可以采用类型别名\ninterface MuchType1{\n    name: string;\n}\n\ninterface MuchType2{\n    age: number;\n}\n\ntype MuchType = MuchType1 | MuchType2;\n\nconst obj1: MuchType = {\n    name: \&amp;quot;Jack\&amp;quot;\n}\n\nconst obj2: MuchType = {\n    age: 20\n}\n\nconst obj3: MuchType = {\n    name: \&amp;quot;Jay\&amp;quot;,\n    age: 22\n}\n\nconsole.log(obj1);\nconsole.log(obj2);\nconsole.log(obj3);&amp;quot;,&amp;quot;classes&amp;quot;:[]}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet"><code class="language-javascript hljs"><span class="hljs-comment">// 对于接口也可以采用类型别名
interface MuchType1{
    <span class="hljs-attr">name: string;
}

interface MuchType2{
    <span class="hljs-attr">age: number;
}

type MuchType = MuchType1 | MuchType2;

<span class="hljs-keyword">const obj1: MuchType = {
    <span class="hljs-attr">name: <span class="hljs-string">"Jack"
}

<span class="hljs-keyword">const obj2: MuchType = {
    <span class="hljs-attr">age: <span class="hljs-number">20
}

<span class="hljs-keyword">const obj3: MuchType = {
    <span class="hljs-attr">name: <span class="hljs-string">"Jay",
    <span class="hljs-attr">age: <span class="hljs-number">22
}

<span class="hljs-built_in">console.log(obj1);
<span class="hljs-built_in">console.log(obj2);
<span class="hljs-built_in">console.log(obj3);</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<span class="cke_reset cke_widget_drag_handler_container"><img class="cke_reset cke_widget_drag_handler lazyload" title="点击并拖拽以移动" alt="" width="15" height="15" data-cke-widget-drag-handler="1" data-src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw=="></span></div>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-widget-wrapper="1" data-cke-filter="off" data-cke-display-name="代码段" data-cke-widget-id="2">
<pre class="cke_widget_element" data-cke-widget-data="{&amp;quot;lang&amp;quot;:&amp;quot;javascript&amp;quot;,&amp;quot;code&amp;quot;:&amp;quot;// 限制字符串的选择\ntype sex = \&amp;quot;男\&amp;quot; | \&amp;quot;女\&amp;quot;;\n\nfunction getSex(s: sex): string{\n    return s;\n}\n\ngetSex(\&amp;quot;男\&amp;quot;);&amp;quot;,&amp;quot;classes&amp;quot;:[]}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet"><code class="language-javascript hljs"><span class="hljs-comment">// 限制字符串的选择
type sex = <span class="hljs-string">"男" | <span class="hljs-string">"女";

<span class="hljs-function"><span class="hljs-keyword">function <span class="hljs-title">getSex(<span class="hljs-params">s: sex): <span class="hljs-title">string{
    <span class="hljs-keyword">return s;
}

getSex(<span class="hljs-string">"男");</span></span></span></span></span></span></span></span></span></span></code></pre>
<span class="cke_reset cke_widget_drag_handler_container"><img class="cke_reset cke_widget_drag_handler lazyload" title="点击并拖拽以移动" alt="" width="15" height="15" data-cke-widget-drag-handler="1" data-src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw=="></span></div>
<p><strong>10、Typescript枚举:</strong></p>
<p>枚举(enum)类型用于取值被限定在一定范围内的场景。</p>
<p>采用关键字enum定义,比如:enum days{Sun, Mon, Tue, Wed, Thu, Fri, Sat}。</p>
<p>枚举成员会被赋值为从0开始递增的数字,同时也会被枚举值到枚举名进行反向映射。</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-widget-wrapper="1" data-cke-filter="off" data-cke-display-name="代码段" data-cke-widget-id="1">
<pre class="cke_widget_element" data-cke-widget-data="{&amp;quot;lang&amp;quot;:&amp;quot;javascript&amp;quot;,&amp;quot;code&amp;quot;:&amp;quot;// 使用枚举可以定义一些有名字的数字常量\nenum Days{\n    Sun,\n    Mon,\n    Tue,\n    Wed, \n    Thu, \n    Fri, \n    Sat\n}\n\nconsole.log(Days.Sun); // 0\nconsole.log(Days.Sat); // 6\nconsole.log(Days); // {0: \&amp;quot;Sun\&amp;quot;, 1: \&amp;quot;Mon\&amp;quot;, 2: \&amp;quot;Tue\&amp;quot;, 3: \&amp;quot;Wed\&amp;quot;, 4: \&amp;quot;Thu\&amp;quot;, 5: \&amp;quot;Fri\&amp;quot;, 6: \&amp;quot;Sat\&amp;quot;, Sun: 0, Mon: 1, Tue: 2, Wed: 3, Thu: 4,&nbsp;…}\nconsole.log(Days === \&amp;quot;Sun\&amp;quot;); // True&amp;quot;,&amp;quot;classes&amp;quot;:[]}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet"><code class="language-javascript hljs"><span class="hljs-comment">// 使用枚举可以定义一些有名字的数字常量
enum Days{
    Sun,
    Mon,
    Tue,
    Wed,
    Thu,
    Fri,
    Sat
}

<span class="hljs-built_in">console.log(Days.Sun); <span class="hljs-comment">// 0
<span class="hljs-built_in">console.log(Days.Sat); <span class="hljs-comment">// 6
<span class="hljs-built_in">console.log(Days); <span class="hljs-comment">// {0: "Sun", 1: "Mon", 2: "Tue", 3: "Wed", 4: "Thu", 5: "Fri", 6: "Sat", Sun: 0, Mon: 1, Tue: 2, Wed: 3, Thu: 4,&nbsp;…}
<span class="hljs-built_in">console.log(Days[<span class="hljs-number">0] === <span class="hljs-string">"Sun"); <span class="hljs-comment">// True</span></span></span></span></span></span></span></span></span></span></span></code></pre>
<span class="cke_reset cke_widget_drag_handler_container"><img class="cke_reset cke_widget_drag_handler lazyload" title="点击并拖拽以移动" alt="" width="15" height="15" data-cke-widget-drag-handler="1" data-src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw=="></span></div>
<p><strong>11、Typescript类的装饰符:</strong></p>
<p>public、private和protected。</p>
<p><strong>12、Typescript泛型:</strong></p>
<p>泛型是指在定义函数、接口或类的时候,不预先指定具体类型,而是在使用的时候再指定类型的一种特性。</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-widget-wrapper="1" data-cke-filter="off" data-cke-display-name="代码段" data-cke-widget-id="0">
<pre class="cke_widget_element" data-cke-widget-data="{&amp;quot;lang&amp;quot;:&amp;quot;javascript&amp;quot;,&amp;quot;code&amp;quot;:&amp;quot;// 函数中使用泛型\nfunction createArr&amp;lt;T&amp;gt;(length: number, value: T): Array&amp;lt;T&amp;gt;{\n    const arr = [];\n    for(let i = 0; i&amp;lt;length; i++){\n      arr = value;\n    }\n\n    return arr;\n}\n\nconst strArr: string[] = createArr(8,\&amp;quot;a\&amp;quot;);\nconsole.log(strArr);\nconst numArr: number[] = createArr(6, 1);\nconsole.log(numArr);\n\n// 接口当中使用泛型\ninterface Icreate{\n    &amp;lt;T&amp;gt;(name: string, value: T): Array&amp;lt;T&amp;gt;;\n}\n\nconst func: Icreate = function&amp;lt;T&amp;gt;(name: string, value: T): Array&amp;lt;T&amp;gt;{\n    return [];\n}\n\nconst strArr2: number[] = func(\&amp;quot;Jack\&amp;quot;, 3);&amp;quot;,&amp;quot;classes&amp;quot;:[]}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet"><code class="language-javascript hljs"><span class="hljs-comment">// 函数中使用泛型
<span class="hljs-function"><span class="hljs-keyword">function <span class="hljs-title">createArr&lt;<span class="hljs-title">T&gt;(<span class="hljs-params">length: number, value: T): <span class="hljs-title">Array&lt;<span class="hljs-title">T&gt;{
    <span class="hljs-keyword">const arr = [];
    <span class="hljs-keyword">for(<span class="hljs-keyword">let i = <span class="hljs-number">0; i&lt;length; i++){
      arr = value;
    }

    <span class="hljs-keyword">return arr;
}

<span class="hljs-keyword">const strArr: string[] = createArr(<span class="hljs-number">8,<span class="hljs-string">"a");
<span class="hljs-built_in">console.log(strArr);
<span class="hljs-keyword">const numArr: number[] = createArr(<span class="hljs-number">6, <span class="hljs-number">1);
<span class="hljs-built_in">console.log(numArr);

<span class="hljs-comment">// 接口当中使用泛型
interface Icreate{
    &lt;T&gt;(name: string, <span class="hljs-attr">value: T): <span class="hljs-built_in">Array&lt;T&gt;;
}

<span class="hljs-keyword">const func: Icreate = <span class="hljs-function"><span class="hljs-keyword">function&lt;<span class="hljs-title">T&gt;(<span class="hljs-params">name: string, value: T): <span class="hljs-title">Array&lt;<span class="hljs-title">T&gt;{
    <span class="hljs-keyword">return [];
}

<span class="hljs-keyword">const strArr2: number[] = func(<span class="hljs-string">"Jack", <span class="hljs-number">3);</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<span class="cke_reset cke_widget_drag_handler_container"><img class="cke_reset cke_widget_drag_handler lazyload" title="点击并拖拽以移动" alt="" width="15" height="15" data-cke-widget-drag-handler="1" data-src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw=="></span></div><br><br>
来源:https://www.cnblogs.com/samve/p/12347658.html
頁: [1]
查看完整版本: Typescript语法简单汇总