{"id":4423,"date":"2026-01-20T15:21:17","date_gmt":"2026-01-20T07:21:17","guid":{"rendered":"https:\/\/blog.odjbinail.cn\/?p=4423"},"modified":"2026-04-15T15:15:59","modified_gmt":"2026-04-15T07:15:59","slug":"%e5%9f%ba%e4%ba%8etypescript%e4%bb%8e%e9%9b%b6%e9%87%8d%e6%9e%84axios","status":"publish","type":"post","link":"https:\/\/blog.odjbinail.cn\/?p=4423","title":{"rendered":"\u57fa\u4e8eTypeScript\u4ece\u96f6\u91cd\u6784axios"},"content":{"rendered":"<h2>\u4e3a\u4ec0\u4e48\u8981\u5b66\u4e60 TypeScript<\/h2>\n<ul>\n<li>\u662f JavaScript \u7684\u589e\u5f3a<\/li>\n<li>\u6dfb\u52a0\u53ef\u9009\u62e9\u7c7b\u578b\u6807\u6ce8, \u5927\u5927\u589e\u5f3a\u4e86\u4ee3\u7801\u7684\u53ef\u8bfb\u6027\u548c\u53ef\u7ef4\u62a4\u6027<\/li>\n<li>\u63d0\u4f9b\u6700\u65b0\u548c\u4e0d\u65ad\u53d1\u5c55 JavaScript \u7279\u6027, \u80fd\u8ba9\u6211\u4eec\u5efa\u7acb\u66f4\u517c\u5bb9\u7684\u7ec4\u4ef6<\/li>\n<li>\u672a\u6765\u524d\u7aef\u5f00\u53d1\u8d8b\u52bf<\/li>\n<li>\u6280\u672f\u8f6c\u578b\u7684\u8d8b\u52bf<\/li>\n<li>\u63d0\u5347\u4e2a\u4eba\u80fd\u529b\u548c\u7ade\u4e89\u529b<\/li>\n<\/ul>\n<h2>\u5b89\u88c5 typescript<\/h2>\n<ul>\n<li>npm install -g typescript<\/li>\n<\/ul>\n<h2>\u57fa\u7840\u7c7b\u578b<\/h2>\n<pre class=\"prettyprint linenums\" ><code>\/\/index.ts\n\/\/\u6570\u5b57\nlet decLiteral: number = 20;\nlet hexLiteral: number = 0x14;\nlet binaryLiteral: number = 0b10100\nlet octalLiteral: number = 0o24\n\n\/\/\u5b57\u7b26\u4e32\nlet name1: string = &#039;fd&#039;\nlet age:number=20\nlet sentence=`hello my name is ${name1}`\/\/\u7528\u8fd9\u79cd\n\/\/ let sentence=&#039;hello my name is&#039;+name\n\n\/\/\u6570\u7ec4\nlet list:number[]=[1,2,3]\/\/\u63a8\u8350\u7b2c\u4e00\u79cd\n\/\/ let list1:Array&lt;number&gt;=[1,2,3]\n\nlet x:[string,number]\nx=[&#039;hello&#039;,10]\nconsole.log(x[0].substr(1))\n\n\/\/\u5143\u7ec4\nlet y:[string,number]\ny=[&#039;eee&#039;,10]\nconsole.log(y[0].toString())\n\n\/\/enum \u679a\u4e3e\u7c7b\u578b\nenum Color{\n  Red,\n  Green,\n  Blue\n}\nlet c:Color=Color.Green\n\n\/\/any\nlet notSure:any=4\nnotSure=&#039;maybe a&#039;\nnotSure=false\n\n\/\/void\nfunction warnUser():void{\n  console.log(&#039;this is warning message&#039;)\n}\n\/\/null undefined\nlet u: undefined=undefined\nlet n:null=null \/\/undefined\nlet num:number|null=3\nnum=null\n\n\/\/never\nfunction error(msg:string):never{\n  throw new Error(msg)\n}\nfunction fail(){\n  return error(&#039;something failed&#039;)\n}\n\/\/\u65e0\u9650\u5faa\u73af\nfunction iinj():never{\n  while (true){\n\n  }\n}\n\/\/object\ndeclare function create(o:object|null):void;\n\/\/\u975e\u539f\u59cb\u7c7b\u578b\ncreate({prop:0})\ncreate(null)\n\n\/\/\u539f\u59cb\u7c7b\u578b\ncreate(42)\ncreate(&#039;string&#039;)\ncreate(false)\ncreate(undefined)\n\n\/\/\u7c7b\u578b\u65ad\u8a00\nlet someValue:any=&#039;a string&#039;\n\/\/let strLength:number=(&lt;string&gt;someValue).length\nlet strLength1:number=(someValue as string).length \/\/\u63a8\u8350<\/code><\/pre>\n<h2>\u53d8\u91cf\u58f0\u660e<\/h2>\n<h3>var \u58f0\u660e<\/h3>\n<pre class=\"prettyprint linenums\" ><code>\/\/index.js\n\/\/\u975e\u5e38\u5178\u578b\u7684\u95ed\u5305\u573a\u666f\n\/\/ function f(){\n\/\/     var a=10\n\/\/     return function g(){\n\/\/         var b=a+1\n\/\/         return b\n\/\/     }\n\/\/ }\n\/\/\n\/\/ var g=f()\n\/\/ console.log(g())\/\/11\n\n\/\/var \u7684\u4f5c\u7528\u57df\u89c4\u5219\n\/\/ function f(should){\n\/\/     if(should){\n\/\/         var x=10\n\/\/     }\n\/\/     return x\n\/\/ }\n\/\/ f(true)\/\/10\n\/\/ f(false)\/\/undefined\n\nfunction sumMatrix(matrix){\n    var sum=0\n    for (var i=0;i&lt;matrix.length;i++){\n        var currentRow=matrix[i]\n        for (var j = 0; j &lt; currentRow.length; j++) {\n            sum+=currentRow[j]\n        }\n    }\n    return sum\n}\nvar matrix=[\n    [1,2,3],\n    [4,5,6]\n]\nconsole.log(sumMatrix(matrix))\/\/21\n\n\/\/\u9762\u8bd5\u7ecf\u5e38\u8003\u7684\nfor (let i = 0; i &lt; 10; i++) {\n    (function (j){\n        setTimeout(function (){\n            console.log(j)\n        },100*j)\/\/0-9\n    })(i)\n    \/\/ setTimeout(function (){\n    \/\/     console.log(i)\n    \/\/ },100*i)\/\/\u89c6\u9891\u4e0a\u662f 10 \u4e2a 10, \u4f46\u662f\u6211\u8fd0\u884c\u662f 0-9\n}<\/code><\/pre>\n<h3>let \u58f0\u660e<\/h3>\n<pre class=\"prettyprint linenums\" ><code>\/* (1)\u5757\u7ea7\u4f5c\u7528\u57df\nfunction f(input: boolean) {\n  let a = 100\n  if (input) {\/\/\u5757\u7ea7\u4f5c\u7528\u57df\n    let b = a + 1 \/\/a \u5185\u90e8\u53ef\u4ee5\u8bbf\u95ee\u5916\u90e8\n    return b\n  }\n  return b \/\/\u4e0d\u5b58\u5728\n}\n*\/\n\/* (2)\ntry{\n  throw &#039;Oh no&#039;\n}catch (e){\n  console.log(&#039;catch&#039;)\n}\nconsole.log(e)\/\/\u8bbf\u95ee\u4e0d\u5230\n *\/\n\n\/* (3)\u5728\u58f0\u660e\u4e4b\u524d\u4e0d\u80fd\u88ab\u8bfb\u5199\u7684 -&gt;\u6682\u65f6\u6027\u6b7b\u533a\na++\nlet a=1\n*\/\n\n\/* \u6682\u65f6\u6027\u6b7b\u533a\nfunction foo(){\n  return a\n}\nfoo()\nlet a\n*\/\n\n\/\/let \u53d8\u91cf\u4e0d\u80fd\u88ab\u91cd\u590d\u58f0\u660e (\u5728\u5757\u7ea7\u53ef\u4ee5)\n\/*\nfunction f(condition, x) {\n  if (condition) {\n    let x = 100\n    return x\n  }\n  return x\n}\n\nf(false, 0)\nf(true, 0)\n*\/\n\nfunction sumMatrix(matrix: number[][]) {\n  let sum = 0\n  for (let i = 0; i &lt; matrix.length; i++) {\n    let currentRow = matrix[i]\n    for (let j = 0; j &lt; currentRow.length; j++) {\n      sum += currentRow[j]\n    }\n  }\n  return sum\n}\nlet matrix=[\n  [1,2,3],\n  [4,5,6]\n]\nconsole.log(sumMatrix(matrix))\/\/21\n\n\/\/\u5757\u7ea7\u4f5c\u7528\u57df\u7684\u83b7\u53d6\nfor (let i = 0; i &lt; 10; i++) {\n  setTimeout(function (){\n    console.log(i)\/\/10 \u6b21 10 setTimeout \u662f\u5f02\u6b65\u6267\u884c\u7684\n  },100*i)\n}<\/code><\/pre>\n<h3>\u89e3\u6784<\/h3>\n<pre class=\"prettyprint linenums\" ><code>\/\/\u6570\u7ec4\u89e3\u6784\nlet input:[number,number] =[1,2]\nfunction f([first,second]:[number,number]){\n  console.log(first)\/\/1\n  console.log(second)\/\/2\n}\nf(input)\n\nlet [first,...rest]=[1,2,3,4]\nconsole.log(first)\/\/1\nconsole.log(rest)\/\/[ 2, 3, 4 ]\n\nlet [,second,,fourth]=[1,2,3,4]\nconsole.log(second)\/\/2\nconsole.log(fourth)\/\/4\n\n\/\/\u5bf9\u8c61\u89e3\u6784\nlet o={\n  a:&#039;foo&#039;,\n  b:12,\n  c:&#039;bar&#039;\n}\nlet {a,...passthrough}=o\nlet total=passthrough.b+passthrough.c.length\nconsole.log(total)\/\/15\n\n\/\/ let {a,b}:{a:string,b:number}=o\n\n\/\/\u9ed8\u8ba4\u503c\u7684\u60c5\u51b5\nfunction keepWholeObject(wholeObject:{a:string,b?:number}){\n  let {a,b=1001}=wholeObject\n}\n\/\/\u51fd\u6570\u58f0\u660e\ntype C={a:string,b:number}\nfunction f1({a,b=0}={a:&#039;&#039;}):void{\n\n}\nf1({a:&#039;yes&#039;})\nf()<\/code><\/pre>\n<h3>\u5c55\u5f00<\/h3>\n<pre class=\"prettyprint linenums\" ><code>\/\/\u6570\u7ec4\u5c55\u5f00 ...args  \u6d45\u62f7\u8d1d\n\n\/\/\u5bf9\u8c61\u5c55\u5f00\nlet defaults={\n  food:&#039;spicy&#039;,\n  price:&#039;$10&#039;\n}\nlet search={...defaults,food: &#039;rich&#039;}\nconsole.log(search)\/\/{ food: &#039;rich&#039;, price: &#039;$10&#039; }<\/code><\/pre>\n<h2>\u63a5\u53e3<\/h2>\n<h3>\u53ef\u9009\u5c5e\u6027+\u53ea\u8bfb\u5c5e\u6027+\u989d\u5916\u5c5e\u6027\u68c0\u67e5<\/h3>\n<pre class=\"prettyprint linenums\" ><code>interface LabelledValue{\n  label:string\n}\n\/\/\u7c7b\u578b\u68c0\u6d4b\u5668\nfunction printLabel(labelledObj:LabelledValue){\n  console.log(labelledObj.label)\n}\nlet myObj={size:10,label:&#039;Size 10 Object&#039;}\nprintLabel(myObj)\/\/Size 10 Object\n\n\/\/\u53ef\u9009\u5c5e\u6027\ninterface Square{\n  color:string\n  area:number\n}\ninterface SquareConfig{\n  color?:string\n  width?:number\n  \/\/(2)\n  [propName: string]: any\n}\nfunction createSquare(config: SquareConfig):Square{\n  let newSquare={color:&#039;white&#039;,area:100}\n  if(config.color){\n    newSquare.color=config.color\n  }\n  if(config.width){\n    newSquare.area=config.width*config.width\n  }\n  return newSquare\n}\n\/\/ts \u4f1a\u5bf9\u5bf9\u8c61\u5b57\u9762\u91cf, \u505a\u989d\u5916\u7684\u5c5e\u6027\u68c0\u67e5,\u4e00\u65e6\u53d1\u73b0\u6240\u4f20\u7684\u5bf9\u8c61\u6709\u4e9b\u5c5e\u6027\u4e0d\u5728\u5b9a\u4e49\u7684\u5c5e\u6027\u91cc\u9762,\u5c31\u4f1a\u62a5\u9519\n\/\/\u989d\u5916\u5c5e\u6027\u68c0\u67e5, \u5982\u679c colour \u8fd9\u5c5e\u6027,\u662f\u771f\u6b63 bug \u7684\u6765\u6e90, \u8981\u53bb\u68c0\u67e5 SquareConfig\n\/\/(1)\u4e00\u79cd\u901a\u8fc7\u7c7b\u578b\u65ad\u8a00,  \u8fd9\u79cd\u5e76\u4e0d\u597d\n\/\/ let squareOptions={colour:&#039;black&#039;,width:100} as SquareConfig\n\/\/(2)\n\/\/let squareOptions = {color: &#039;black&#039;, width: 100}\n\/\/let mySquare = createSquare(squareOptions)\nlet mySquare = createSquare( {color: &#039;black&#039;, width: 100})\n\/\/\u53ea\u8bfb\u5c5e\u6027\ninterface Point{\n  readonly x:number\n  readonly y:number\n}\nlet p1:Point={x:10,y:20}\np1.x=5\n\nlet a:number[]=[1,2,3,4]\nlet ro:ReadonlyArray&lt;number&gt;=a\n\/\/ ro[0]=12\na=ro as number[]<\/code><\/pre>\n<h3>\u51fd\u6570\u7c7b\u578b+\u53ef\u7d22\u5f15\u7684\u7c7b\u578b<\/h3>\n<pre class=\"prettyprint linenums\" ><code>\/\/\u51fd\u6570\u7c7b\u578b\ninterface SearchFunc{\n  (source:string,substring:string):boolean\n}\nlet mySearch:SearchFunc\nmySearch=function (src,sub):boolean{\n  let result=src.search(sub)\/\/result \u662f number \u7c7b\u578b\n  return result&gt;-1\/\/\u53d8\u4e3a boolean \u7c7b\u578b\n}\n\n\/\/\u53ef\u7d22\u5f15\u7684\u7c7b\u578b, \u6570\u5b57\u7d22\u5f15\u7b7e\u540d\ninterface StringArray{\n  [index:number]:string\n}\nlet myArray:StringArray\nmyArray=[&#039;bob&#039;,&#039;fred&#039;]\n\nlet myStr:string=myArray[0]\n\n\/\/\u5b57\u7b26\u4e32\u7d22\u5f15\u7b7e\u540d\nclass Animal{\n  name:string\n}\nclass Dog extends Animal{\n  breed:string\n}\ninterface NotOkay{\n  [x:number]:Dog\n  [x:string]:Animal\n}\n\n\/\/\ninterface NumberDictionary{\n  [index:string]:number\n  length:number\n  \/\/ name:string \u4f1a\u62a5\u9519\n}\n\/\/\u53ea\u8bfb\ninterface ReadonlyStringArray{\n  readonly [index:number]:string\n}\nlet myArray:ReadonlyStringArray=[&#039;Alice&#039;,&#039;Bob&#039;]\nmyArray[2]=&#039;Mallory&#039;<\/code><\/pre>\n<h3>\u7c7b\u7c7b\u578b+\u7ee7\u627f\u63a5\u53e3+\u6df7\u5408\u7c7b\u578b+\u63a5\u53e3\u7ee7\u627f\u7c7b<\/h3>\n<ul>\n<li>\u7c7b\u7c7b\u578b<\/li>\n<\/ul>\n<pre class=\"prettyprint linenums\" ><code>\/\/\u7c7b\u7c7b\u578b\ninterface ClockInterface {\n  currentTime: Date;\n  setTime(d:Date)\n}\n\/\/\u6784\u9020\u5668\u7c7b\u578b\ninterface ClockConstructor {\n    new (hour: number, minute: number);\n}\n\n\/\/\u7c7b\u5b9e\u73b0\u63a5\u53e3\nclass Clock implements ClockInterface {\n    currentTime: Date;\n    setTime(d: Date) {\n        this.currentTime = d;\n    }\n    constructor(h: number, m: number) { }\n}\n\/\/\u5b9e\u4f8b\u7c7b\u578b\ninterface ClockInterface {\n    tick()\n}\ninterface ClockConstructor {\n    new (hour: number, minute: number): ClockInterface;\n}\nfunction createClock(ctor: ClockConstructor, hour: number, minute: number): ClockInterface {\n    return new ctor(hour, minute);\n}\nclass DigitalClock implements ClockInterface {\n    constructor(h:number,m:number) {\n    }\n    tick() {\n        console.log(&quot;beep beep&quot;)\n    }\n}\n\nclass AnalogClock implements ClockInterface {\n    constructor(h:number,m:number) {\n    }\n    tick() {\n        console.log(&quot;tick tock&quot;)\n    }\n}<\/code><\/pre>\n<ul>\n<li>\u7ee7\u627f\u63a5\u53e3<\/li>\n<\/ul>\n<pre class=\"prettyprint linenums\" ><code>interface Shape{\n    color:string\n}\ninterface PenStroke{\n    penWidth:number\n}\ninterface Square extends Shape,PenStroke{\n    sideLength:number\n}\nlet squre={} as Square\nsqure.color=&#039;blue&#039;\nsqure.sideLength=10\nsqure.penWidth=5.0<\/code><\/pre>\n<ul>\n<li>\u6df7\u5408\u7c7b\u578b<\/li>\n<\/ul>\n<pre class=\"prettyprint linenums\" ><code>interface Counter{\n    (start:number):string\n    interval:number\n    reset():void\n}\nfunction getCounter():Counter{\n    let couter=(function (start:number){\n\n    })as Counter\n    couter.interval=123\n    couter.reset=function (){}\n    return couter\n}\nlet c=getCounter()\nc(10)\nc.reset()\nc.interval=5.0<\/code><\/pre>\n<ul>\n<li>\u63a5\u53e3\u7ee7\u627f\u7c7b<\/li>\n<\/ul>\n<pre class=\"prettyprint linenums\" ><code>class Control{\n    private state:any\n}\ninterface  SelectableControl extends Control{\n    select()\n}\nclass Button extends Control implements SelectableControl{\n    select() {\n    }\n}\nclass TextBox extends Control{\n    select(){\n\n    }\n}\nclass ImageC implements SelectableControl{\n    select() {\n    }\n}<\/code><\/pre>\n<h2>\u7c7b<\/h2>\n<h3>\u57fa\u672c\u793a\u4f8b+\u7ee7\u627f<\/h3>\n<pre class=\"prettyprint linenums\" ><code>class Greeter{\n    greeting: string;\n    constructor(message: string){\n        this.greeting = message;\n    }\n    greet(){\n        return &quot;Hello, &quot; + this.greeting;\n    }\n}\nlet greeter=new Greeter(&#039;world&#039;)\ngreeter.greet()<\/code><\/pre>\n<ul>\n<li>\u7ee7\u627f<\/li>\n<\/ul>\n<pre class=\"prettyprint linenums\" ><code>class Animal {\n    name: string\n    constructor(name:string) {\n      this.name=name\n    }\n    move(distance: number = 0) {\n        console.log(`${this.name} moved ${distance}m`)\n    }\n}\nclass Snake extends Animal {\n    constructor(name: string) {\n        super(name)\n    }\n    move(distance: number = 5) {\n        console.log(&quot;Slithering...&quot;)\n\n    }\n }\n\n class Horse extends Animal{\n    constructor(name:string) {\n        super(name);\n    }\n    move(distance: number = 45) {\n        console.log(&quot;Galloping...&quot;)\n        super.move(distance)\n    }\n }\n let sam=new Snake(&#039;Sammy&#039;)\nlet tom:Animal=new Horse(&#039;Tommy&#039;)\nsam.move()\ntom.move(34)<\/code><\/pre>\n<p><img data-original=\"https:\/\/blog.odjbinail.cn\/wp-content\/uploads\/2024\/11\/2024111714165957.png\"  alt=\"\" \/><\/p>\n<noscript><img decoding=\"async\" src=\"https:\/\/blog.odjbinail.cn\/wp-content\/uploads\/2024\/11\/2024111714165957.png\" alt=\"\" \/><\/p><\/noscript>\n<h3>\u516c\u5171,\u79c1\u6709\u4e0e\u53d7\u4fdd\u62a4\u4fee\u9970\u7b26+readonly \u4fee\u9970\u7b26<\/h3>\n<ul>\n<li>\u53d7\u4fdd\u62a4\u4fee\u9970\u7b26 \u53ea\u80fd\u5728\u5185\u90e8\u548c\u5b50\u7c7b\u4e2d\u4f7f\u7528<\/li>\n<\/ul>\n<h3>\u5b58\u53d6\u5668+\u9759\u6001\u5c5e\u6027?<\/h3>\n<ul>\n<li>\u652f\u6301 get set<\/li>\n<\/ul>\n<pre class=\"prettyprint linenums\" ><code>let passcode=&quot;secret passcode&quot;\nclass Emplyee{\n    private _fullName:string\n    get fullName():string{\n        return this._fullName\n    }\n    set fullName(newName:string){\n        if(passcode&amp;&amp;passcode===&#039;secret passcode&#039;){\n            this._fullName=newName\n        }else {\n            console.log(&#039;Error : unauthorized update&#039;)\n        }\n    }\n}\nlet employee=new Emplyee()\nemployee.fullName=&#039;Bob Smith&#039;\nif(employee.fullName){\n    console.log(employee.fullName)\n}<\/code><\/pre>\n<h3>\u62bd\u8c61\u7c7b<\/h3>\n<pre class=\"prettyprint linenums\" ><code>abstract class Department{\n    name:string\n    constructor(name:string) {\n        this.name=name\n    }\n    printName():void{\n        console.log(&#039;Dept name&#039;+this.name)\n    }\n    abstract printMeeting():void\n}\n\nclass AccountingDepart extends Department{\n    constructor() {\n        super(&#039;Accounting&#039;)\n    }\n    printMeeting(): void {\n        console.log(&#039;The Accounting Department meets each Monday at 10am.&#039;)\n    }\n    generateReports(): void {\n        console.log(&#039;Generating accounting reports...&#039;)\n    }\n}\n\/\/\u62bd\u8c61\u7c7b\u4e0d\u80fd\u88ab\u5b9e\u4f8b\u5316,\u53ea\u80fd\u88ab\u7ee7\u627f\n\/\/\u6d3e\u751f\u7c7b\u5fc5\u987b\u5b9e\u73b0\u62bd\u8c61\u7c7b\u4e2d\u7684\u62bd\u8c61\u65b9\u6cd5\nlet department:AccountingDepart\ndepartment=new AccountingDepart()\ndepartment.generateReports()\n\nlet dept:Department\ndept=new AccountingDepart()\ndept.printMeeting()\ndept.printName()<\/code><\/pre>\n<p><img data-original=\"https:\/\/blog.odjbinail.cn\/wp-content\/uploads\/2024\/11\/2024112322394189.png\"  alt=\"\" \/><\/p>\n<noscript><img decoding=\"async\" src=\"https:\/\/blog.odjbinail.cn\/wp-content\/uploads\/2024\/11\/2024112322394189.png\" alt=\"\" \/><\/p><\/noscript>\n<h2>\u51fd\u6570<\/h2>\n<h2>\u6cdb\u578b<\/h2>\n<pre class=\"prettyprint linenums\" ><code>\/**\n * identity \u51fd\u6570\u662f\u4e00\u4e2a\u6cdb\u578b\u51fd\u6570\uff0c\u7528\u4e8e\u8fd4\u56de\u4f20\u5165\u7684\u6570\u7ec4\u672c\u8eab\u3002\n * \u5b83\u7684\u4e3b\u8981\u4f5c\u7528\u662f\u6f14\u793a\u6cdb\u578b\u7684\u4f7f\u7528\u65b9\u6cd5\uff0c\u4ee5\u53ca\u5728\u51fd\u6570\u5185\u90e8\u5982\u4f55\u5904\u7406\u6cdb\u578b\u6570\u7ec4\u3002\n * \n * @param arg {T[]} - \u4e00\u4e2a\u6cdb\u578b\u6570\u7ec4\uff0c\u53ef\u4ee5\u5305\u542b\u4efb\u4f55\u7c7b\u578b\u7684\u5143\u7d20\u3002\n * @returns {T[]} - \u8fd4\u56de\u4f20\u5165\u7684\u6570\u7ec4\uff0c\u4e0d\u505a\u4efb\u4f55\u4fee\u6539\u3002\n *\/\nfunction identity&lt;T&gt;(arg:T[]):T[] {\n  \/\/ \u8f93\u51fa\u6570\u7ec4\u957f\u5ea6\uff0c\u7528\u4e8e\u6f14\u793a\u5728\u51fd\u6570\u5185\u90e8\u53ef\u4ee5\u8bbf\u95ee\u6570\u7ec4\u7684\u5c5e\u6027\n  console.log(arg.length);\n  \/\/ \u8fd4\u56de\u4f20\u5165\u7684\u6570\u7ec4\uff0c\u4e0d\u505a\u4efb\u4f55\u4fee\u6539\n  return arg;\n}\n<\/code><\/pre>\n<h3>\u6cdb\u578b\u7c7b<\/h3>\n<pre class=\"prettyprint linenums\" ><code>\/\/ \u5b9a\u4e49\u6cdb\u578b\u63a5\u53e3\uff0c\u7528\u4e8e\u7ea6\u675f\u5b9e\u73b0\u8be5\u63a5\u53e3\u7684\u51fd\u6570\u5fc5\u987b\u662f\u201c\u8f93\u5165\u548c\u8f93\u51fa\u7c7b\u578b\u76f8\u540c\u7684\u51fd\u6570\u201d\ninterface GenericIdentityFn {\n  &lt;T&gt;(arg: T): T;\n}\n\n\/\/ \u58f0\u660e\u4e00\u4e2a\u53d8\u91cf myIdentity\uff0c\u5176\u7c7b\u578b\u4e3a GenericIdentityFn\uff0c\u5e76\u6307\u5b9a\u5176\u5177\u4f53\u7c7b\u578b\u53c2\u6570\u4e3a number\n\/\/ \u8fd9\u91cc\u5047\u8bbe identity \u51fd\u6570\u662f\u5df2\u7ecf\u5b58\u5728\u7684\uff0c\u4e14\u7b26\u5408 GenericIdentityFn \u63a5\u53e3\u7684\u5b9a\u4e49\nlet myIdentity: GenericIdentityFn&lt;number&gt; = identity();\n\n\/**\n * \u5b9a\u4e49\u4e00\u4e2a\u6cdb\u578b\u7c7b GenericNumber\uff0c\u7528\u4e8e\u5904\u7406\u6cdb\u578b\u6570\u503c\u6216\u7b26\u5408\u6570\u503c\u64cd\u4f5c\u7684\u7c7b\u578b\n * @template T \u8868\u793a\u6cdb\u578b\u53c2\u6570\uff0c\u5141\u8bb8\u5728\u5b9e\u4f8b\u5316\u65f6\u6307\u5b9a\u5177\u4f53\u7684\u7c7b\u578b\n * \u7c7b\u5305\u62ec\u9759\u6001\u90e8\u5206\u548c\u5b9e\u4f8b\u90e8\u5206, \u6cdb\u578b\u7c7b\u662f\u6307\u5b9e\u4f8b\u90e8\u5206\u7684\u7c7b\u578b, \u9759\u6001\u5c5e\u6027\u4e0d\u5c5e\u4e8e\u5b9e\u4f8b\uff0c\u6240\u4ee5\u4e0d\u9700\u8981\u6307\u5b9a\u6cdb\u578b\u53c2\u6570\n *\/\nclass GenericNumber&lt;T&gt; {\n  \/\/ \u5b9a\u4e49\u6cdb\u578b\u7c7b\u578b\u7684\u5c5e\u6027 zeroValue\uff0c\u8868\u793a\u96f6\u503c\n  zeroValue: T;\n  \/\/ \u5b9a\u4e49\u6cdb\u578b\u7c7b\u578b\u7684 add \u65b9\u6cd5\uff0c\u63a5\u53d7\u4e24\u4e2a\u53c2\u6570\u5e76\u8fd4\u56de\u5b83\u4eec\u76f8\u52a0\u7684\u7ed3\u679c\n  add: (x: T, y: T) =&gt; T;\n}\n\n\/\/ \u521b\u5efa\u4e00\u4e2a GenericNumber \u7c7b\u7684\u5b9e\u4f8b\uff0c\u6307\u5b9a\u7c7b\u578b\u53c2\u6570\u4e3a number\nlet myGenericNumber = new GenericNumber&lt;number&gt;();\nmyGenericNumber.zeroValue = 0;\n\/\/ \u8bbe\u7f6e\u6570\u5b57\u7c7b\u578b\u7684 add \u65b9\u6cd5\u4e3a\u4e24\u4e2a\u6570\u5b57\u76f8\u52a0\nmyGenericNumber.add = function (x, y) {\n  return x + y;\n};\n\nlet stringNumeric = new GenericNumber&lt;string&gt;();\nstringNumeric.zeroValue = &#039;&#039;;\n\/\/ \u8bbe\u7f6e\u5b57\u7b26\u4e32\u7c7b\u578b\u7684 add \u65b9\u6cd5\u4e3a\u4e24\u4e2a\u5b57\u7b26\u4e32\u62fc\u63a5\nstringNumeric.add = function (x, y) {\n  return x + y;\n};\nconsole.log(stringNumeric.add(stringNumeric.zeroValue, &#039;test&#039;));<\/code><\/pre>\n<h2>\u5904\u7406\u8bf7\u6c42 url \u53c2\u6570<\/h2>\n<ul>\n<li>url.ts<\/li>\n<\/ul>\n<pre class=\"prettyprint linenums\" ><code>import { isDate, isObject, isPlainObject } from &#039;.\/util&#039;\nfunction encode(val:string):string{\n  return encodeURIComponent(val)\n    .replace(\/%40\/g,&#039;@&#039;)\n    .replace(\/%3A\/g,&#039;:&#039;)\n    .replace(\/%24\/g,&#039;$&#039;)\n    .replace(\/%2C\/g,&#039;,&#039;)\n    .replace(\/%20\/g,&#039;+&#039;)\n    .replace(\/%5B\/g,&#039;[&#039;)\n    .replace(\/%5D\/g,&#039;]&#039;)\n}\nexport function buildURL(url: string, params?: any): string {\n  if (!params){\n    return url\n  }\n  const parts:string[]=[]\n  \/\/ forEach return \u662f\u8df3\u5230\u4e0b\u6b21\u5faa\u73af\n  Object.keys(params).forEach((key)=&gt;{\n    const val=params[key]\n    if(val===null||typeof val===&#039;undefined&#039;){\n      return\n    }\n    let values=[]\n    if(Array.isArray(val)){\n      values=val\n      key+=&#039;[]&#039;\n    }else{\n      values=[val]\n    }\n    values.forEach((val)=&gt;{\n      if(isDate(val)){\n        val=val.toISOString()\n      }else if(isPlainObject(val)){\n        val=JSON.stringify(val)\n      }\n      parts.push(`${encode(key)}=${encode(val)}`)\n    })\n  })\n  let serializedParams=parts.join(&#039;&amp;&#039;)\n  if(serializedParams){\n    const marIndex=url.indexOf(&#039;#&#039;)\n    if(marIndex!==-1){\n      url=url.slice(0,marIndex)\n    }\n    url+=(url.indexOf(&#039;?&#039;)===-1?&#039;?&#039;:&#039;&amp;&#039;)+serializedParams\n  }\n  return url\n}\n<\/code><\/pre>\n<h2>\u5904\u7406\u8bf7\u6c42 body \u53c2\u6570<\/h2>\n<ul>\n<li>data.ts<\/li>\n<\/ul>\n<pre class=\"prettyprint linenums\" ><code>import { isPlainObject } from &#039;.\/util&#039;\n\nexport function transformRequest(data: any): any {\n  if (isPlainObject(data)) {\n    return JSON.stringify(data)\n  }\n  return data\n}<\/code><\/pre>\n<h2>\u5904\u7406\u8bf7\u6c42 header<\/h2>\n<ul>\n<li>headers.ts<\/li>\n<\/ul>\n<pre class=\"prettyprint linenums\" ><code>import { isPlainObject } from &#039;.\/util&#039;\n\nfunction normalizeHeaderName(headers:any,normalizedName:string):void{\n  if(!headers) {\n    return\n  }\n  Object.keys(headers).forEach((name)=&gt;{\n    if(name!==normalizedName&amp;&amp;name.toUpperCase()===normalizedName.toUpperCase()){\n      headers[normalizedName]=headers[name]\n      delete headers[name]\n    }\n  })\n}\nexport function processHeaders(headers:any,data:any):any{\n  normalizeHeaderName(headers,&#039;Content-Type&#039;)\n  if(isPlainObject(data)){\n    if(headers&amp;&amp;!headers[&#039;Content-Type&#039;]){\n      headers[&#039;Content-Type&#039;]=&#039;application\/json;charset=utf-8&#039;\n    }\n  }\n  return headers\n}<\/code><\/pre>\n<h2>\u5904\u7406\u54cd\u5e94\u6570\u636e , header, data<\/h2>\n<ul>\n<li>headers.ts<\/li>\n<\/ul>\n<pre class=\"prettyprint linenums\" ><code>export function parseHeaders(headers:string):any{\n  let parsed=Object.create(null)\n  if(!headers){\n    return parsed\n  }\n  headers.split(&#039;\\r\\n&#039;).forEach((line)=&gt;{\n    let [key,val]=line.split(&#039;:&#039;)\n    key=key.trim().toLowerCase()\n    if(!key){\n      return\n    }\n    if(val){\n      val=val.trim()\n    }\n    parsed[key]=val\n  })\n  return parsed\n}\n<\/code><\/pre>\n<h2>\u5f02\u5e38\u60c5\u51b5\u5904\u7406 error.ts<\/h2>\n<h2>\u63a5\u53e3\u6269\u5c55( \u5de5\u5382\u6a21\u5f0f\u7684\u8fd0\u7528 )<\/h2>\n<h2>\u62e6\u622a\u5668\u5b9e\u73b0<\/h2>\n<h2>\u5408\u5e76\u914d\u7f6e\u7684\u8bbe\u8ba1\u4e0e\u5b9e\u73b0<\/h2>\n","protected":false},"excerpt":{"rendered":"<p>\u4e3a\u4ec0\u4e48\u8981\u5b66\u4e60 TypeScript \u662f JavaScript \u7684\u589e\u5f3a \u6dfb\u52a0\u53ef\u9009\u62e9\u7c7b\u578b\u6807\u6ce8, \u5927\u5927\u589e\u5f3a\u4e86\u4ee3\u7801\u7684\u53ef [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[],"class_list":["post-4423","post","type-post","status-publish","format-standard","hentry","category-web"],"_links":{"self":[{"href":"https:\/\/blog.odjbinail.cn\/index.php?rest_route=\/wp\/v2\/posts\/4423","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.odjbinail.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.odjbinail.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.odjbinail.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.odjbinail.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4423"}],"version-history":[{"count":45,"href":"https:\/\/blog.odjbinail.cn\/index.php?rest_route=\/wp\/v2\/posts\/4423\/revisions"}],"predecessor-version":[{"id":4867,"href":"https:\/\/blog.odjbinail.cn\/index.php?rest_route=\/wp\/v2\/posts\/4423\/revisions\/4867"}],"wp:attachment":[{"href":"https:\/\/blog.odjbinail.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4423"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.odjbinail.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4423"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.odjbinail.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4423"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}