<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>6Jyc5p+a</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <id>https://loli.fj.cn/</id>
  <link href="https://loli.fj.cn/" rel="alternate"/>
  <link href="https://loli.fj.cn/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, 6Jyc5p+a</rights>
  <subtitle>
    <![CDATA[MS4wLjABAAAA5qMD8Gzdcgq7HXUOviKB59i0-ybJ59jJvNzyaPt5XOsVNqP6DU7WLcoAXvdxvYdp💗<br><span style="color: red">本站所有文章仅作技术研究，请勿非法破坏，请遵守相关法律法规，后果自负</span>]]>
  </subtitle>
  <title>6Jyc5p+a</title>
  <updated>2026-04-07T01:30:48.482Z</updated>
  <entry>
    <author>
      <name>6Jyc5p+a</name>
    </author>
    <category term="uni-app学习指北" scheme="https://loli.fj.cn/categories/uni-app%E5%AD%A6%E4%B9%A0%E6%8C%87%E5%8C%97/"/>
    <category term="uni-app" scheme="https://loli.fj.cn/tags/uni-app/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>uni-app是一个开放源代码的跨平台前端应用开发框架，由中华人民共和国的DCloud公司于2018年开发并维护。该框架基于Vue.js技术栈，允许开发者使用单一代码库构建可运行于iOS、Android、HarmonyOS NEXT、Web以及各类小程序（包括微信、支付宝、百度、今日头条、飞书、QQ、快手、钉钉、淘宝、360、京东、小红书）和快应用等多个平台的移动应用程序。（<a href="/302.html?target=https://zh.wikipedia.org/wiki/Uni-app">维基百科</a>）</p><span id="more"></span><h2 id="创建项目"><a href="#创建项目" class="headerlink" title="创建项目"></a>创建项目</h2><h3 id="Vue2"><a href="#Vue2" class="headerlink" title="Vue2"></a>Vue2</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">npm install -g @vue/cli</span><br><span class="line">vue create -p dcloudio/uni-preset-vue &lt;project_name&gt;</span><br></pre></td></tr></table></figure><h3 id="Vue3（JS）"><a href="#Vue3（JS）" class="headerlink" title="Vue3（JS）"></a>Vue3（JS）</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">npx degit dcloudio/uni-preset-vue#vite &lt;project_name&gt;</span><br><span class="line">npm install</span><br></pre></td></tr></table></figure><h3 id="Vue3（TS）"><a href="#Vue3（TS）" class="headerlink" title="Vue3（TS）"></a>Vue3（TS）</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npx degit dcloudio/uni-preset-vue#vite-ts &lt;project_name&gt;</span><br></pre></td></tr></table></figure><h2 id="Android"><a href="#Android" class="headerlink" title="Android"></a>Android</h2><h3 id="手动连接Android模拟器"><a href="#手动连接Android模拟器" class="headerlink" title="手动连接Android模拟器"></a>手动连接Android模拟器</h3><ul><li>如果HBuilder不能扫描到设备，可以手动建立adb连接</li></ul><blockquote><p><code>&lt;port&gt;</code>：端口号</p><blockquote><p><a href="https://syzs.qq.com/">腾讯手游助手</a>：<code>5555</code><br><a href="https://mumu.163.com/">网易MuMu</a>：<code>7555</code><br><a href="https://www.yeshen.com/">夜神</a>：<code>62001</code><br><a href="https://www.xyaz.cn/">逍遥</a>：<code>21503</code><br><a href="https://www.ldmnq.com/">雷电</a>：<code>5555</code><br><a href="https://www.bluestacks.com/">BlueStacks</a>：<code>5555</code><br><a href="https://www.genymotion.com/">Genymotion</a>：<code>5555</code></p></blockquote></blockquote><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">adb connect &lt;ip&gt;:&lt;port&gt;</span><br></pre></td></tr></table></figure><h2 id="条件编译"><a href="#条件编译" class="headerlink" title="条件编译"></a>条件编译</h2><figure class="highlight js"><figcaption><span>main.js</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// #ifdef VUE3</span></span><br><span class="line">...</span><br><span class="line"><span class="comment">// #endif</span></span><br></pre></td></tr></table></figure><figure class="highlight js"><figcaption><span>main.js</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// #ifndef VUE3</span></span><br><span class="line">...</span><br><span class="line"><span class="comment">// #endif</span></span><br></pre></td></tr></table></figure><h2 id="生命周期函数"><a href="#生命周期函数" class="headerlink" title="生命周期函数"></a>生命周期函数</h2><ul><li>生命周期函数只能在<code>App.vue</code>中定义</li></ul><figure class="highlight plaintext"><figcaption><span>App.vue</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">&lt;script&gt;</span><br><span class="line">  export default &#123;</span><br><span class="line">    onLaunch: function() &#123;</span><br><span class="line">      ...</span><br><span class="line">    &#125;,</span><br><span class="line">    onShow: function() &#123;</span><br><span class="line">      ...</span><br><span class="line">    &#125;,</span><br><span class="line">    onHide: function() &#123;</span><br><span class="line">      ...</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;</span><br><span class="line">&lt;/script&gt;</span><br></pre></td></tr></table></figure><h2 id="CSS样式"><a href="#CSS样式" class="headerlink" title="CSS样式"></a>CSS样式</h2><h3 id="作用范围"><a href="#作用范围" class="headerlink" title="作用范围"></a>作用范围</h3><h4 id="全局样式"><a href="#全局样式" class="headerlink" title="全局样式"></a>全局样式</h4><ul><li><code>App.vue</code>文件内定义的样式默认为全局样式</li></ul><figure class="highlight plaintext"><figcaption><span>App.vue</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">&lt;style&gt;</span><br><span class="line">  * &#123;</span><br><span class="line">    color: red;</span><br><span class="line">  &#125;</span><br><span class="line">&lt;/style&gt;</span><br></pre></td></tr></table></figure><h4 id="局部样式"><a href="#局部样式" class="headerlink" title="局部样式"></a>局部样式</h4><ul><li>非<code>App.vue</code>文件内定义的样式默认为局部样式</li></ul><figure class="highlight plaintext"><figcaption><span>pages/page/page.vue</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">&lt;style&gt;</span><br><span class="line">  * &#123;</span><br><span class="line">    color: red;</span><br><span class="line">  &#125;</span><br><span class="line">&lt;/style&gt;</span><br></pre></td></tr></table></figure><h3 id="预处理器"><a href="#预处理器" class="headerlink" title="预处理器"></a>预处理器</h3><blockquote><p><code>lang</code>：指定预处理器</p></blockquote><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">&lt;style lang=&quot;less&quot;&gt;</span><br><span class="line">  * &#123;</span><br><span class="line">    color: red;</span><br><span class="line">  &#125;</span><br><span class="line">&lt;/style&gt;</span><br></pre></td></tr></table></figure><h3 id="uni-scss"><a href="#uni-scss" class="headerlink" title="uni.scss"></a>uni.scss</h3><ul><li>uni.scss可以定义新的或重写旧的全局样式</li><li>uni.scss可以全局引入其他样式文件中定义的变量，项目中的其他样式文件无需导入就可以直接使用</li></ul><figure class="highlight scss"><figcaption><span>uni.scss</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">* &#123;</span><br><span class="line">  <span class="attribute">color</span>: red;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="当前组件的根样式"><a href="#当前组件的根样式" class="headerlink" title="当前组件的根样式"></a>当前组件的根样式</h3><figure class="highlight scss"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">page</span> &#123;</span><br><span class="line">  </span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2><h2 id="参考文献"><a href="#参考文献" class="headerlink" title="参考文献"></a>参考文献</h2><p><a href="https://uniapp.dcloud.net.cn/quickstart-cli.html">DCloud官方文档</a><br><a href="https://zhuanlan.zhihu.com/p/408356887">知乎——赵青青</a></p>]]>
    </content>
    <id>https://loli.fj.cn/2026/03/30/uni-app%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</id>
    <link href="https://loli.fj.cn/2026/03/30/uni-app%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    <published>2026-03-30T23:03:10.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>uni-app是一个开放源代码的跨平台前端应用开发框架，由中华人民共和国的DCloud公司于2018年开发并维护。该框架基于Vue.js技术栈，允许开发者使用单一代码库构建可运行于iOS、Android、HarmonyOS NEXT、Web以及各类小程序（包括微信、支付宝、百度、今日头条、飞书、QQ、快手、钉钉、淘宝、360、京东、小红书）和快应用等多个平台的移动应用程序。（<a href="/302.html?target=https://zh.wikipedia.org/wiki/Uni-app">维基百科</a>）</p>]]>
    </summary>
    <title>【笔记】uni-app学习笔记</title>
    <updated>2026-04-07T01:30:48.482Z</updated>
  </entry>
  <entry>
    <author>
      <name>6Jyc5p+a</name>
    </author>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Postman动态获取Token</p><span id="more"></span><h2 id="正文"><a href="#正文" class="headerlink" title="正文"></a>正文</h2><ul><li>在登录接口的<code>Tests</code>中添加代码，将响应数据中的Token存放到环境变量</li></ul><blockquote><p><code>tokenToEnv</code>：环境变量名<br><code>tokenFromResponse</code>：响应数据中Token数据的字段名</p></blockquote><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pm.<span class="property">globals</span>.<span class="title function_">set</span>(<span class="string">&quot;tokenToEnv&quot;</span>, pm.<span class="property">response</span>.<span class="title function_">json</span>().<span class="property">tokenFromResponse</span>)</span><br></pre></td></tr></table></figure><ul><li>在其他接口的<code>Authorization</code>-&gt;<code>Token</code>中注入环境变量<code>&#123;&#123;tokenToEnv&#125;&#125;</code></li></ul><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/03/30/Postman%E5%8A%A8%E6%80%81%E8%8E%B7%E5%8F%96Token/</id>
    <link href="https://loli.fj.cn/2026/03/30/Postman%E5%8A%A8%E6%80%81%E8%8E%B7%E5%8F%96Token/"/>
    <published>2026-03-30T17:38:56.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Postman动态获取Token</p>]]>
    </summary>
    <title>【笔记】Postman动态获取Token</title>
    <updated>2026-04-07T01:30:48.438Z</updated>
  </entry>
  <entry>
    <author>
      <name>6Jyc5p+a</name>
    </author>
    <category term="JavaScript" scheme="https://loli.fj.cn/tags/JavaScript/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">116298807454585344</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Dotenv is a zero-dependency module that loads environment variables from a .env file into process.env.（<a href="/302.html?target=https://github.com/motdotla/dotenv">Github</a>）</p><span id="more"></span><h2 id="下载依赖"><a href="#下载依赖" class="headerlink" title="下载依赖"></a>下载依赖</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install dotenv</span><br></pre></td></tr></table></figure><h2 id="创建配置文件"><a href="#创建配置文件" class="headerlink" title="创建配置文件"></a>创建配置文件</h2><figure class="highlight plaintext"><figcaption><span>.env</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">KEY=&quot;value&quot;</span><br></pre></td></tr></table></figure><h3 id="针对于开发环境的配置"><a href="#针对于开发环境的配置" class="headerlink" title="针对于开发环境的配置"></a>针对于开发环境的配置</h3><figure class="highlight plaintext"><figcaption><span>.env.development</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">KEY=&quot;value&quot;</span><br></pre></td></tr></table></figure><h3 id="针对于生产环境的配置"><a href="#针对于生产环境的配置" class="headerlink" title="针对于生产环境的配置"></a>针对于生产环境的配置</h3><figure class="highlight plaintext"><figcaption><span>.env.production</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">KEY=&quot;value&quot;</span><br></pre></td></tr></table></figure><h3 id="不会上传到Git的配置"><a href="#不会上传到Git的配置" class="headerlink" title="不会上传到Git的配置"></a>不会上传到Git的配置</h3><figure class="highlight plaintext"><figcaption><span>.env.local</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">KEY=&quot;value&quot;</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/03/25/dotenv%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</id>
    <link href="https://loli.fj.cn/2026/03/25/dotenv%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    <published>2026-03-25T22:09:14.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Dotenv is a zero-dependency module that loads environment variables from a .env file into process.env.（<a href="/302.html?target=https://github.com/motdotla/dotenv">Github</a>）</p>]]>
    </summary>
    <title>【笔记】dotenv学习笔记</title>
    <updated>2026-04-07T01:30:48.477Z</updated>
  </entry>
  <entry>
    <author>
      <name>6Jyc5p+a</name>
    </author>
    <category term="JavaScript" scheme="https://loli.fj.cn/tags/JavaScript/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">116298811198797842</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Vite (French: [vit], like “veet”) is a local development server backed by VoidZero Inc.（<a href="/302.html?target=https://en.wikipedia.org/wiki/Vite_(software)">维基百科</a>）</p><span id="more"></span><h2 id="创建项目"><a href="#创建项目" class="headerlink" title="创建项目"></a>创建项目</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm create vite@latest &lt;project_name&gt;</span><br></pre></td></tr></table></figure><h2 id="运行项目"><a href="#运行项目" class="headerlink" title="运行项目"></a>运行项目</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npx vite</span><br></pre></td></tr></table></figure><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npx vite run</span><br></pre></td></tr></table></figure><h2 id="打包项目"><a href="#打包项目" class="headerlink" title="打包项目"></a>打包项目</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npx vite build</span><br></pre></td></tr></table></figure><h3 id="预览打包后的项目"><a href="#预览打包后的项目" class="headerlink" title="预览打包后的项目"></a>预览打包后的项目</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npx vite preview</span><br></pre></td></tr></table></figure><h2 id="内置常量"><a href="#内置常量" class="headerlink" title="内置常量"></a>内置常量</h2><h3 id="环境变量"><a href="#环境变量" class="headerlink" title="环境变量"></a>环境变量</h3><h4 id="模式"><a href="#模式" class="headerlink" title="模式"></a>模式</h4><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> mode = <span class="keyword">import</span>.<span class="property">meta</span>.<span class="property">env</span>.<span class="property">MODE</span>;</span><br></pre></td></tr></table></figure><h4 id="是否是开发环境"><a href="#是否是开发环境" class="headerlink" title="是否是开发环境"></a>是否是开发环境</h4><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> yes = <span class="keyword">import</span>.<span class="property">meta</span>.<span class="property">env</span>.<span class="property">DEV</span>;</span><br></pre></td></tr></table></figure><h4 id="是否是生产环境"><a href="#是否是生产环境" class="headerlink" title="是否是生产环境"></a>是否是生产环境</h4><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> yes = <span class="keyword">import</span>.<span class="property">meta</span>.<span class="property">env</span>.<span class="property">PROD</span>;</span><br></pre></td></tr></table></figure><h4 id="是否是服务端渲染"><a href="#是否是服务端渲染" class="headerlink" title="是否是服务端渲染"></a>是否是服务端渲染</h4><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> yes = <span class="keyword">import</span>.<span class="property">meta</span>.<span class="property">env</span>.<span class="property">SSR</span>;</span><br></pre></td></tr></table></figure><h4 id="读取自定义环境变量"><a href="#读取自定义环境变量" class="headerlink" title="读取自定义环境变量"></a>读取自定义环境变量</h4><ul><li>环境变量需要以<code>VITE_</code>作为前缀才能被Vite识别</li></ul><figure class="highlight plaintext"><figcaption><span>.env</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">VITE_KEY=&quot;value&quot;</span><br></pre></td></tr></table></figure><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> key = <span class="keyword">import</span>.<span class="property">meta</span>.<span class="property">env</span>.<span class="property">VITE_KEY</span>;</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/03/25/Vite%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</id>
    <link href="https://loli.fj.cn/2026/03/25/Vite%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    <published>2026-03-25T21:53:20.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Vite (French: [vit], like “veet”) is a local development server backed by VoidZero Inc.（<a href="/302.html?target=https://en.wikipedia.org/wiki/Vite_(software)">维基百科</a>）</p>]]>
    </summary>
    <title>【笔记】Vite学习笔记</title>
    <updated>2026-04-07T01:30:48.464Z</updated>
  </entry>
  <entry>
    <author>
      <name>6Jyc5p+a</name>
    </author>
    <category term="JavaScript" scheme="https://loli.fj.cn/tags/JavaScript/"/>
    <category term="Jetbrains" scheme="https://loli.fj.cn/tags/Jetbrains/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">116292884932384410</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>IDEA保存JS文件时自动执行ESLint</p><span id="more"></span><h2 id="正文"><a href="#正文" class="headerlink" title="正文"></a>正文</h2><ul><li><code>文件</code>-&gt;<code>设置</code>-&gt;<code>语言和框架</code>-&gt;<code>JavaScript</code>-&gt;<code>代码质量工具</code>-&gt;<code>ESLint</code>-&gt;勾选<code>自动ESLint设置</code>-&gt;<code>确定</code></li></ul><p><img src="/images/20260326012222/01.webp"></p><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/03/25/IDEA%E4%BF%9D%E5%AD%98JS%E6%96%87%E4%BB%B6%E6%97%B6%E8%87%AA%E5%8A%A8%E6%89%A7%E8%A1%8CESLint/</id>
    <link href="https://loli.fj.cn/2026/03/25/IDEA%E4%BF%9D%E5%AD%98JS%E6%96%87%E4%BB%B6%E6%97%B6%E8%87%AA%E5%8A%A8%E6%89%A7%E8%A1%8CESLint/"/>
    <published>2026-03-25T17:22:22.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>IDEA保存JS文件时自动执行ESLint</p>]]>
    </summary>
    <title>【笔记】IDEA保存JS文件时自动执行ESLint</title>
    <updated>2026-04-07T01:30:48.399Z</updated>
  </entry>
  <entry>
    <author>
      <name>6Jyc5p+a</name>
    </author>
    <category term="JavaScript" scheme="https://loli.fj.cn/tags/JavaScript/"/>
    <category term="Jetbrains" scheme="https://loli.fj.cn/tags/Jetbrains/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">116292843065998291</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>IDEA保存JS文件时自动执行Prettier</p><span id="more"></span><h2 id="正文"><a href="#正文" class="headerlink" title="正文"></a>正文</h2><ul><li><code>文件</code>-&gt;<code>设置</code>-&gt;<code>语言和框架</code>-&gt;<code>JavaScript</code>-&gt;<code>Prettier</code>-&gt;勾选<code>自动Prettier设置</code>-&gt;<code>确定</code></li></ul><p><img src="/images/20260326011819/01.webp"></p><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/03/25/IDEA%E4%BF%9D%E5%AD%98JS%E6%96%87%E4%BB%B6%E6%97%B6%E8%87%AA%E5%8A%A8%E6%89%A7%E8%A1%8CPrettier/</id>
    <link href="https://loli.fj.cn/2026/03/25/IDEA%E4%BF%9D%E5%AD%98JS%E6%96%87%E4%BB%B6%E6%97%B6%E8%87%AA%E5%8A%A8%E6%89%A7%E8%A1%8CPrettier/"/>
    <published>2026-03-25T17:18:19.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>IDEA保存JS文件时自动执行Prettier</p>]]>
    </summary>
    <title>【笔记】IDEA保存JS文件时自动执行Prettier</title>
    <updated>2026-04-07T01:30:48.399Z</updated>
  </entry>
  <entry>
    <author>
      <name>6Jyc5p+a</name>
    </author>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">116289018505816533</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>EditorConfig is an open specification and file format for syntax highlighting, text editors and integrated development environment (IDEs) that aims to maintain a consistent coding style, particularly aimed at groups working together.（<a href="/302.html?target=https://en.wikipedia.org/wiki/EditorConfig">维基百科</a>）</p><span id="more"></span><h2 id="创建配置文件"><a href="#创建配置文件" class="headerlink" title="创建配置文件"></a>创建配置文件</h2><blockquote><p><code>charset</code>：指定文件编码集<br><code>indent_style</code>：指定缩进方式</p><blockquote><p><code>space</code>、<code>tab</code></p></blockquote><p><code>indent_size</code>：指定缩进大小<br><code>end_of_line</code>：指定换行符</p><blockquote><p><code>lf</code>、<code>crlf</code>、<code>cr</code></p></blockquote><p><code>trim_trailing_whitespace</code>：指定是否删除行尾空白字符<br><code>insert_final_newline</code>：指定是否添加文件末尾空行</p></blockquote><figure class="highlight plaintext"><figcaption><span>.editorconfig</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">root = true</span><br><span class="line"></span><br><span class="line">[*]</span><br><span class="line">charset = utf-8</span><br><span class="line">indent_style = space</span><br><span class="line">indent_size = 2</span><br><span class="line">end_of_line = lf</span><br><span class="line">trim_trailing_whitespace = true</span><br><span class="line">insert_final_newline = true</span><br><span class="line"></span><br><span class="line">[*.go]</span><br><span class="line">indent_style = tab</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/03/24/EditorConfig%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</id>
    <link href="https://loli.fj.cn/2026/03/24/EditorConfig%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    <published>2026-03-24T23:32:28.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>EditorConfig is an open specification and file format for syntax highlighting, text editors and integrated development environment (IDEs) that aims to maintain a consistent coding style, particularly aimed at groups working together.（<a href="/302.html?target=https://en.wikipedia.org/wiki/EditorConfig">维基百科</a>）</p>]]>
    </summary>
    <title>【笔记】EditorConfig学习笔记</title>
    <updated>2026-04-07T01:30:48.382Z</updated>
  </entry>
  <entry>
    <author>
      <name>6Jyc5p+a</name>
    </author>
    <category term="JavaScript" scheme="https://loli.fj.cn/tags/JavaScript/"/>
    <category term="Nodejs" scheme="https://loli.fj.cn/tags/Nodejs/"/>
    <category term="Sass" scheme="https://loli.fj.cn/tags/Sass/"/>
    <category term="Webpack" scheme="https://loli.fj.cn/tags/Webpack/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">116281667253706243</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Webpack打包Sass文件</p><span id="more"></span><h2 id="下载依赖"><a href="#下载依赖" class="headerlink" title="下载依赖"></a>下载依赖</h2><ul><li>下载<code>sass-loader</code>时会自动下载<code>sass</code></li></ul><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install -D style-loader css-loader sass-loader</span><br></pre></td></tr></table></figure><h2 id="修改配置文件"><a href="#修改配置文件" class="headerlink" title="修改配置文件"></a>修改配置文件</h2><figure class="highlight js"><figcaption><span>webpack.config.js</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="variable language_">module</span>.<span class="property">exports</span> = &#123;</span><br><span class="line">  <span class="attr">module</span>: &#123;</span><br><span class="line">    <span class="attr">rules</span>: [</span><br><span class="line">      &#123;</span><br><span class="line">        <span class="attr">test</span>: <span class="regexp">/\.(sass|scss)$/</span>,</span><br><span class="line">        <span class="attr">use</span>: [<span class="string">&quot;style-loader&quot;</span>, <span class="string">&quot;css-loader&quot;</span>, <span class="string">&quot;sass-loader&quot;</span>]</span><br><span class="line">      &#125;</span><br><span class="line">    ]</span><br><span class="line">  &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h2 id="引入Sass文件"><a href="#引入Sass文件" class="headerlink" title="引入Sass文件"></a>引入Sass文件</h2><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">require</span>(<span class="string">&quot;./style.scss&quot;</span>);</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/03/23/Webpack%E6%89%93%E5%8C%85Sass%E6%96%87%E4%BB%B6/</id>
    <link href="https://loli.fj.cn/2026/03/23/Webpack%E6%89%93%E5%8C%85Sass%E6%96%87%E4%BB%B6/"/>
    <published>2026-03-23T17:51:39.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Webpack打包Sass文件</p>]]>
    </summary>
    <title>【笔记】Webpack打包Sass文件</title>
    <updated>2026-04-07T01:30:48.466Z</updated>
  </entry>
  <entry>
    <author>
      <name>6Jyc5p+a</name>
    </author>
    <category term="TypeScript学习指北" scheme="https://loli.fj.cn/categories/TypeScript%E5%AD%A6%E4%B9%A0%E6%8C%87%E5%8C%97/"/>
    <category term="JavaScript" scheme="https://loli.fj.cn/tags/JavaScript/"/>
    <category term="TypeScript" scheme="https://loli.fj.cn/tags/TypeScript/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">116277135229972060</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>TS的配置文件学习笔记</p><span id="more"></span><h2 id="配置文件"><a href="#配置文件" class="headerlink" title="配置文件"></a>配置文件</h2><blockquote><p><code>compilerOptions.target</code>：指定编译后的目标JS兼容版本<br><code>compilerOptions.module</code>：指定编译后的目标JS模块化规范<br><code>compilerOptions.strict</code>：指定是否开启TS严格模式的所有选项<br><code>compilerOptions.allowJs</code>：指定是否允许TS文件中编写JS代码<br><code>compilerOptions.jsx</code>：指定是否转换JSX语法</p><blockquote><p><code>preserve</code>：保留标签<br><code>react</code>：将标签转换为<code>React.createElement()</code></p></blockquote><p><code>compilerOptions.esModuleInterop</code>：指定是否允许混用ESModule和CommonJS<br><code>compilerOptions.baseUrl</code>：指定项目根目录<br><code>compilerOptions.paths</code>：指定项目路径别名<br><code>compilerOptions.lib</code>：指定项目种可以使用的内部库<br><code>include</code>：指定哪些文件会被编译，可以使用通配符，缺省值为<code>[&quot;./*&quot;]</code><br><code>exclude</code>：指定哪些文件会被排除，可以使用通配符，缺省值为<code>[&quot;node_modules/**/*&quot;]</code><br><code>files</code>：指定哪些文件会被编译，不能使用通配符</p></blockquote><figure class="highlight json"><figcaption><span>tsconfig.json</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;compilerOptions&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;target&quot;</span><span class="punctuation">:</span> <span class="string">&quot;esnext&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;module&quot;</span><span class="punctuation">:</span> <span class="string">&quot;esnext&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;strict&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;allowJs&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;jsx&quot;</span><span class="punctuation">:</span> <span class="string">&quot;preserve&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;esModuleInterop&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;baseUrl&quot;</span><span class="punctuation">:</span> <span class="string">&quot;.&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;paths&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;@/*&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;src/*&quot;</span><span class="punctuation">]</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;lib&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;dom&quot;</span><span class="punctuation">,</span> <span class="string">&quot;esnext&quot;</span><span class="punctuation">]</span></span><br><span class="line">  <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;include&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;./*&quot;</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;exclude&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;./node_modules/**/*&quot;</span><span class="punctuation">]</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/03/22/TS%E7%9A%84%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6/</id>
    <link href="https://loli.fj.cn/2026/03/22/TS%E7%9A%84%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6/"/>
    <published>2026-03-22T22:44:17.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>TS的配置文件学习笔记</p>]]>
    </summary>
    <title>【笔记】TS的配置文件</title>
    <updated>2026-04-07T01:30:48.459Z</updated>
  </entry>
  <entry>
    <author>
      <name>6Jyc5p+a</name>
    </author>
    <category term="TypeScript学习指北" scheme="https://loli.fj.cn/categories/TypeScript%E5%AD%A6%E4%B9%A0%E6%8C%87%E5%8C%97/"/>
    <category term="JavaScript" scheme="https://loli.fj.cn/tags/JavaScript/"/>
    <category term="TypeScript" scheme="https://loli.fj.cn/tags/TypeScript/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">116277131927303650</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>TS的<code>.d.ts</code>类型声明文件学习笔记</p><span id="more"></span><h2 id="全局变量类型声明"><a href="#全局变量类型声明" class="headerlink" title="全局变量类型声明"></a>全局变量类型声明</h2><figure class="highlight ts"><figcaption><span>types/global.d.ts</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">declare</span> <span class="keyword">let</span> 变量名: 数据类型;</span><br><span class="line"><span class="keyword">declare</span> <span class="keyword">function</span> 函数名(形参名: 数据类型): 返回值类型;</span><br></pre></td></tr></table></figure><figure class="highlight ts"><figcaption><span>main.js</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(变量名);</span><br><span class="line">函数名(实参);</span><br></pre></td></tr></table></figure><h2 id="模块变量类型声明"><a href="#模块变量类型声明" class="headerlink" title="模块变量类型声明"></a>模块变量类型声明</h2><h3 id="模块全部变量类型声明"><a href="#模块全部变量类型声明" class="headerlink" title="模块全部变量类型声明"></a>模块全部变量类型声明</h3><figure class="highlight ts"><figcaption><span>types/global.d.ts</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">declare</span> <span class="variable language_">module</span> <span class="string">&quot;模块名&quot;</span></span><br></pre></td></tr></table></figure><figure class="highlight ts"><figcaption><span>main.js</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> * <span class="keyword">as</span> 模块名 <span class="keyword">from</span> <span class="string">&quot;模块名&quot;</span>;</span><br><span class="line"></span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(模块名.变量名);</span><br><span class="line">模块名.函数名(实参);</span><br></pre></td></tr></table></figure><h3 id="模块指定变量类型声明"><a href="#模块指定变量类型声明" class="headerlink" title="模块指定变量类型声明"></a>模块指定变量类型声明</h3><figure class="highlight ts"><figcaption><span>types/global.d.ts</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">declare</span> <span class="variable language_">module</span> <span class="string">&quot;模块名&quot;</span> &#123;</span><br><span class="line">  <span class="keyword">export</span> <span class="keyword">let</span> 变量名: 数据类型;</span><br><span class="line">  <span class="keyword">export</span> <span class="keyword">function</span> 函数名(形参名: 数据类型): 返回值类型;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><figure class="highlight ts"><figcaption><span>main.js</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> &#123; 变量名, 函数名 &#125; <span class="keyword">from</span> <span class="string">&quot;模块名&quot;</span>;</span><br><span class="line"></span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(变量名);</span><br><span class="line">函数名(实参);</span><br></pre></td></tr></table></figure><h2 id="文件变量类型声明"><a href="#文件变量类型声明" class="headerlink" title="文件变量类型声明"></a>文件变量类型声明</h2><figure class="highlight ts"><figcaption><span>types/global.d.ts</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">declare</span> <span class="variable language_">module</span> <span class="string">&quot;*.png&quot;</span></span><br></pre></td></tr></table></figure><figure class="highlight ts"><figcaption><span>main.js</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> 图片名 <span class="keyword">from</span> <span class="string">&quot;./图片名.png&quot;</span>;</span><br><span class="line"></span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(图片名);</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/03/22/TS%E7%9A%84%E7%B1%BB%E5%9E%8B%E5%A3%B0%E6%98%8E%E6%96%87%E4%BB%B6/</id>
    <link href="https://loli.fj.cn/2026/03/22/TS%E7%9A%84%E7%B1%BB%E5%9E%8B%E5%A3%B0%E6%98%8E%E6%96%87%E4%BB%B6/"/>
    <published>2026-03-22T19:28:23.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>TS的<code>.d.ts</code>类型声明文件学习笔记</p>]]>
    </summary>
    <title>【笔记】TS的类型声明文件</title>
    <updated>2026-04-07T01:30:48.459Z</updated>
  </entry>
  <entry>
    <author>
      <name>6Jyc5p+a</name>
    </author>
    <category term="JavaScript" scheme="https://loli.fj.cn/tags/JavaScript/"/>
    <category term="Nodejs" scheme="https://loli.fj.cn/tags/Nodejs/"/>
    <category term="TypeScript" scheme="https://loli.fj.cn/tags/TypeScript/"/>
    <category term="Webpack" scheme="https://loli.fj.cn/tags/Webpack/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">116194306867258851</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Webpack打包TS文件</p><span id="more"></span><h2 id="下载依赖"><a href="#下载依赖" class="headerlink" title="下载依赖"></a>下载依赖</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install -D ts-loader</span><br></pre></td></tr></table></figure><h2 id="TS配置文件"><a href="#TS配置文件" class="headerlink" title="TS配置文件"></a>TS配置文件</h2><figure class="highlight json"><figcaption><span>tsconfig.json</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h2 id="修改Webpack配置文件"><a href="#修改Webpack配置文件" class="headerlink" title="修改Webpack配置文件"></a>修改Webpack配置文件</h2><figure class="highlight js"><figcaption><span>webpack.config.js</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> path = <span class="built_in">require</span>(<span class="string">&#x27;path&#x27;</span>);</span><br><span class="line"></span><br><span class="line"><span class="variable language_">module</span>.<span class="property">exports</span> = &#123;</span><br><span class="line">  <span class="attr">module</span>: &#123;</span><br><span class="line">    <span class="attr">rules</span>: [</span><br><span class="line">      &#123;</span><br><span class="line">        <span class="attr">test</span>: <span class="regexp">/\.ts$/</span>,</span><br><span class="line">        <span class="attr">use</span>: <span class="string">&quot;ts-loader&quot;</span></span><br><span class="line">      &#125;</span><br><span class="line">    ]</span><br><span class="line">  &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h2 id="引入TS文件"><a href="#引入TS文件" class="headerlink" title="引入TS文件"></a>引入TS文件</h2><figure class="highlight ts"><figcaption><span>index.ts</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="attr">data</span>: <span class="built_in">object</span> = &#123;&#125;;</span><br><span class="line"></span><br><span class="line"><span class="variable language_">module</span>.<span class="property">exports</span> = &#123;</span><br><span class="line">  <span class="attr">data</span>: data</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> &#123; data &#125; = <span class="built_in">require</span>(<span class="string">&quot;./index.ts&quot;</span>);</span><br><span class="line"></span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(data); <span class="comment">// &#123;&#125;</span></span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/03/19/Webpack%E6%89%93%E5%8C%85TS%E6%96%87%E4%BB%B6/</id>
    <link href="https://loli.fj.cn/2026/03/19/Webpack%E6%89%93%E5%8C%85TS%E6%96%87%E4%BB%B6/"/>
    <published>2026-03-19T23:05:46.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Webpack打包TS文件</p>]]>
    </summary>
    <title>【笔记】Webpack打包TS文件</title>
    <updated>2026-04-07T01:30:48.466Z</updated>
  </entry>
  <entry>
    <author>
      <name>6Jyc5p+a</name>
    </author>
    <category term="JavaScript" scheme="https://loli.fj.cn/tags/JavaScript/"/>
    <category term="TypeScript" scheme="https://loli.fj.cn/tags/TypeScript/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">116277130107801529</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>TS的模块化学习笔记</p><span id="more"></span><h2 id="导出模块"><a href="#导出模块" class="headerlink" title="导出模块"></a>导出模块</h2><figure class="highlight ts"><figcaption><span>demo.ts</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">export</span> <span class="keyword">const</span> obj = &#123;&#125;;</span><br></pre></td></tr></table></figure><h2 id="导入模块"><a href="#导入模块" class="headerlink" title="导入模块"></a>导入模块</h2><figure class="highlight ts"><figcaption><span>main.ts</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> * <span class="keyword">as</span> demo <span class="keyword">from</span> <span class="string">&quot;./demo&quot;</span>;</span><br><span class="line"></span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(demo.<span class="property">obj</span>);</span><br></pre></td></tr></table></figure><figure class="highlight ts"><figcaption><span>main.ts</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> &#123; obj &#125; <span class="keyword">from</span> <span class="string">&quot;./demo&quot;</span>;</span><br><span class="line"></span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(obj);</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/03/19/TS%E7%9A%84%E6%A8%A1%E5%9D%97%E5%8C%96/</id>
    <link href="https://loli.fj.cn/2026/03/19/TS%E7%9A%84%E6%A8%A1%E5%9D%97%E5%8C%96/"/>
    <published>2026-03-19T21:31:20.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>TS的模块化学习笔记</p>]]>
    </summary>
    <title>【笔记】TS的模块化</title>
    <updated>2026-04-07T01:30:48.459Z</updated>
  </entry>
  <entry>
    <author>
      <name>6Jyc5p+a</name>
    </author>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">116259139960937655</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>ClaudeCode学习笔记</p><span id="more"></span><h2 id="下载依赖"><a href="#下载依赖" class="headerlink" title="下载依赖"></a>下载依赖</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install -g claude-code</span><br></pre></td></tr></table></figure><h2 id="修改配置文件"><a href="#修改配置文件" class="headerlink" title="修改配置文件"></a>修改配置文件</h2><blockquote><p><code>ANTHROPIC_BASE_URL</code>：定义API的URL<br><code>ANTHROPIC_AUTH_TOKEN</code>：定义API的令牌<br><code>ANTHROPIC_DEFAULT_OPUS_MODEL</code>：定义OPUS模型<br><code>ANTHROPIC_DEFAULT_SONNET_MODEL</code>：定义SONNET模型<br><code>ANTHROPIC_DEFAULT_HAIKU_MODEL</code>：定义HAIKU模型</p></blockquote><figure class="highlight json"><figcaption><span>~/.claude/settings.json</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;env&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;ANTHROPIC_BASE_URL&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;ANTHROPIC_AUTH_TOKEN&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;ANTHROPIC_DEFAULT_OPUS_MODEL&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;ANTHROPIC_DEFAULT_SONNET_MODEL&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;ANTHROPIC_DEFAULT_HAIKU_MODEL&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h2 id="启动ClaudeCode"><a href="#启动ClaudeCode" class="headerlink" title="启动ClaudeCode"></a>启动ClaudeCode</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">claude</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2><h2 id="参考文献"><a href="#参考文献" class="headerlink" title="参考文献"></a>参考文献</h2><p><a href="/302.html?target=https://platform.xiaomimimo.com/#/docs/integration/claude-code">小米MIMO开发文档</a></p>]]>
    </content>
    <id>https://loli.fj.cn/2026/03/19/ClaudeCode%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</id>
    <link href="https://loli.fj.cn/2026/03/19/ClaudeCode%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    <published>2026-03-19T18:25:39.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>ClaudeCode学习笔记</p>]]>
    </summary>
    <title>【笔记】ClaudeCode学习笔记</title>
    <updated>2026-04-07T01:30:48.374Z</updated>
  </entry>
  <entry>
    <author>
      <name>6Jyc5p+a</name>
    </author>
    <category term="TypeScript学习指北" scheme="https://loli.fj.cn/categories/TypeScript%E5%AD%A6%E4%B9%A0%E6%8C%87%E5%8C%97/"/>
    <category term="JavaScript" scheme="https://loli.fj.cn/tags/JavaScript/"/>
    <category term="TypeScript" scheme="https://loli.fj.cn/tags/TypeScript/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">116259120317624145</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>TS的泛型学习笔记</p><span id="more"></span><h2 id="函数"><a href="#函数" class="headerlink" title="函数"></a>函数</h2><h3 id="定义函数时指定泛型类型"><a href="#定义函数时指定泛型类型" class="headerlink" title="定义函数时指定泛型类型"></a>定义函数时指定泛型类型</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> 函数名&lt;泛型类型&gt;() &#123;</span><br><span class="line">  ...</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> 函数名&lt;泛型类型<span class="number">1</span>, 泛型类型<span class="number">2</span>&gt;() &#123;</span><br><span class="line">  ...</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> 函数名&lt;泛型类型 = 默认数据类型&gt;() &#123;</span><br><span class="line">  ...</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="调用函数时指定泛型类型"><a href="#调用函数时指定泛型类型" class="headerlink" title="调用函数时指定泛型类型"></a>调用函数时指定泛型类型</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">函数名&lt;泛型类型&gt;();</span><br></pre></td></tr></table></figure><h3 id="泛型自动类型推导"><a href="#泛型自动类型推导" class="headerlink" title="泛型自动类型推导"></a>泛型自动类型推导</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> 函数名&lt;泛型类型&gt;(形参名: 泛型类型) &#123;</span><br><span class="line">  ...</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">函数名(实参);</span><br></pre></td></tr></table></figure><h2 id="类"><a href="#类" class="headerlink" title="类"></a>类</h2><h3 id="定义类时指定泛型类型"><a href="#定义类时指定泛型类型" class="headerlink" title="定义类时指定泛型类型"></a>定义类时指定泛型类型</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> 类名&lt;泛型类型&gt; &#123;</span><br><span class="line">  ...</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> 类名&lt;泛型类型<span class="number">1</span>, 泛型类型<span class="number">2</span>&gt; &#123;</span><br><span class="line">  ...</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> 类名&lt;泛型类型 = 默认数据类型&gt; &#123;</span><br><span class="line">  ...</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="创建对象时指定泛型类型"><a href="#创建对象时指定泛型类型" class="headerlink" title="创建对象时指定泛型类型"></a>创建对象时指定泛型类型</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名 = <span class="keyword">new</span> 类名&lt;泛型类型&gt;();</span><br></pre></td></tr></table></figure><h3 id="泛型自动类型推导-1"><a href="#泛型自动类型推导-1" class="headerlink" title="泛型自动类型推导"></a>泛型自动类型推导</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> 类名&lt;泛型类型&gt; &#123;</span><br><span class="line">  <span class="keyword">private</span> _属性名: 数据类型;</span><br><span class="line"></span><br><span class="line">  <span class="title function_">constructor</span>(<span class="params">属性名: 泛型类型</span>) &#123;</span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">_</span>属性名 = 属性名;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> 变量名 = <span class="keyword">new</span> 类名(实参);</span><br></pre></td></tr></table></figure><h2 id="接口"><a href="#接口" class="headerlink" title="接口"></a>接口</h2><h3 id="定义接口时指定泛型类型"><a href="#定义接口时指定泛型类型" class="headerlink" title="定义接口时指定泛型类型"></a>定义接口时指定泛型类型</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">interface</span> 接口名&lt;泛型类型&gt; &#123;</span><br><span class="line">  ...</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">interface</span> 接口名&lt;泛型类型1, 泛型类型2&gt; &#123;</span><br><span class="line">  ...</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">interface</span> 接口名&lt;泛型类型 = 默认数据类型&gt; &#123;</span><br><span class="line">  ...</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="使用接口时指定泛型类型"><a href="#使用接口时指定泛型类型" class="headerlink" title="使用接口时指定泛型类型"></a>使用接口时指定泛型类型</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名: 接口名&lt;泛型类型&gt;;</span><br></pre></td></tr></table></figure><h2 id="泛型约束"><a href="#泛型约束" class="headerlink" title="泛型约束"></a>泛型约束</h2><h3 id="约束泛型类型的数据结构"><a href="#约束泛型类型的数据结构" class="headerlink" title="约束泛型类型的数据结构"></a>约束泛型类型的数据结构</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">interface</span> 接口名 &#123;</span><br><span class="line">  ...</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">function</span> 函数名&lt;泛型类型 <span class="keyword">extends</span> 接口名&gt;() &#123;</span><br><span class="line">  ...</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="约束泛型类型为对象所有属性的联合类型"><a href="#约束泛型类型为对象所有属性的联合类型" class="headerlink" title="约束泛型类型为对象所有属性的联合类型"></a>约束泛型类型为对象所有属性的联合类型</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">interface</span> 接口名 &#123;</span><br><span class="line">  属性名<span class="number">1</span>: 数据类型;</span><br><span class="line">  属性名<span class="number">2</span>: 数据类型;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">function</span> 函数名&lt;泛型类型 <span class="keyword">extends</span> keyof 接口名&gt;() &#123;</span><br><span class="line">  ...</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="约束泛型类型为能作为对象属性的联合类型"><a href="#约束泛型类型为能作为对象属性的联合类型" class="headerlink" title="约束泛型类型为能作为对象属性的联合类型"></a>约束泛型类型为能作为对象属性的联合类型</h3><ul><li>约束泛型类型为能作为对象属性的联合类型（<code>string | number | symbol</code>）</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> 函数名&lt;泛型类型 <span class="keyword">extends</span> keyof <span class="built_in">any</span>&gt;() &#123;</span><br><span class="line">  ...</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="内置工具"><a href="#内置工具" class="headerlink" title="内置工具"></a>内置工具</h2><h3 id="获取函数返回值类型"><a href="#获取函数返回值类型" class="headerlink" title="获取函数返回值类型"></a>获取函数返回值类型</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">type</span> 函数类型 = <span class="function">() =&gt;</span> <span class="built_in">any</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">type</span> 函数返回值类型 = <span class="title class_">ReturnType</span>&lt;函数类型&gt;</span><br></pre></td></tr></table></figure><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> 函数名() &#123;&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">type</span> 函数返回值类型 = <span class="title class_">ReturnType</span>&lt;<span class="keyword">typeof</span> 函数名&gt;</span><br></pre></td></tr></table></figure><h3 id="所有属性全部为可选"><a href="#所有属性全部为可选" class="headerlink" title="所有属性全部为可选"></a>所有属性全部为可选</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">type</span> 新类型 = <span class="title class_">Partial</span>&lt;数据类型&gt;;</span><br></pre></td></tr></table></figure><h3 id="所有属性全部为必选"><a href="#所有属性全部为必选" class="headerlink" title="所有属性全部为必选"></a>所有属性全部为必选</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">type</span> 新类型 = <span class="title class_">Required</span>&lt;数据类型&gt;;</span><br></pre></td></tr></table></figure><h3 id="所有属性全部为只读"><a href="#所有属性全部为只读" class="headerlink" title="所有属性全部为只读"></a>所有属性全部为只读</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">type</span> 新类型 = <span class="title class_">Readonly</span>&lt;数据类型&gt;;</span><br></pre></td></tr></table></figure><h3 id="映射类型"><a href="#映射类型" class="headerlink" title="映射类型"></a>映射类型</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">type</span> 新类型 = <span class="title class_">Record</span>&lt;K, V&gt;;</span><br></pre></td></tr></table></figure><h3 id="选择类型"><a href="#选择类型" class="headerlink" title="选择类型"></a>选择类型</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">type</span> 新类型 = <span class="title class_">Pick</span>&lt;K, <span class="string">&quot;key1&quot;</span> | <span class="string">&quot;key2&quot;</span>&gt;;</span><br></pre></td></tr></table></figure><h3 id="过滤类型"><a href="#过滤类型" class="headerlink" title="过滤类型"></a>过滤类型</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">type</span> 新类型 = <span class="title class_">Omit</span>&lt;K, <span class="string">&quot;key1&quot;</span> | <span class="string">&quot;key2&quot;</span>&gt;;</span><br></pre></td></tr></table></figure><h3 id="提取类型"><a href="#提取类型" class="headerlink" title="提取类型"></a>提取类型</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">type</span> 新类型 = <span class="title class_">Extract</span>&lt;K, <span class="string">&quot;key1&quot;</span> | <span class="string">&quot;key2&quot;</span>&gt;;</span><br></pre></td></tr></table></figure><h3 id="非空类型"><a href="#非空类型" class="headerlink" title="非空类型"></a>非空类型</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">type</span> 新类型 = <span class="title class_">NonNullable</span>&lt;数据类型&gt;;</span><br></pre></td></tr></table></figure><h3 id="实例类型"><a href="#实例类型" class="headerlink" title="实例类型"></a>实例类型</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> 类名 &#123;&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">type</span> 新类型 = <span class="title class_">InstanceType</span>&lt;<span class="keyword">typeof</span> 类名&gt;;</span><br></pre></td></tr></table></figure><h2 id="条件类型"><a href="#条件类型" class="headerlink" title="条件类型"></a>条件类型</h2><h3 id="通过泛型提取返函数返回值类型"><a href="#通过泛型提取返函数返回值类型" class="headerlink" title="通过泛型提取返函数返回值类型"></a>通过泛型提取返函数返回值类型</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">type</span> 函数返回值类型&lt;泛型类型&gt; = <span class="function">() =&gt;</span> infer R ? R : <span class="built_in">never</span>;</span><br></pre></td></tr></table></figure><h3 id="通过泛型提取形参类型"><a href="#通过泛型提取形参类型" class="headerlink" title="通过泛型提取形参类型"></a>通过泛型提取形参类型</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">type</span> 函数形参类型 = <span class="function">(<span class="params">...<span class="attr">args</span>: infer A</span>) =&gt;</span> <span class="built_in">any</span>;</span><br></pre></td></tr></table></figure><h3 id="类型分发"><a href="#类型分发" class="headerlink" title="类型分发"></a>类型分发</h3><ul><li>如果泛型参数传递的是联合类型，则实际会进行类型分发</li></ul><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/03/19/TS%E7%9A%84%E6%B3%9B%E5%9E%8B/</id>
    <link href="https://loli.fj.cn/2026/03/19/TS%E7%9A%84%E6%B3%9B%E5%9E%8B/"/>
    <published>2026-03-19T00:19:37.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>TS的泛型学习笔记</p>]]>
    </summary>
    <title>【笔记】TS的泛型</title>
    <updated>2026-04-07T01:30:48.459Z</updated>
  </entry>
  <entry>
    <author>
      <name>6Jyc5p+a</name>
    </author>
    <category term="TypeScript学习指北" scheme="https://loli.fj.cn/categories/TypeScript%E5%AD%A6%E4%B9%A0%E6%8C%87%E5%8C%97/"/>
    <category term="JavaScript" scheme="https://loli.fj.cn/tags/JavaScript/"/>
    <category term="TypeScript" scheme="https://loli.fj.cn/tags/TypeScript/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">116259118480375820</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>TS的枚举学习笔记</p><span id="more"></span><h2 id="定义枚举"><a href="#定义枚举" class="headerlink" title="定义枚举"></a>定义枚举</h2><ul><li>默认枚举值是从0开始的数字序列</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">enum</span> 枚举类名 &#123;</span><br><span class="line">  枚举名<span class="number">1</span>, 枚举名<span class="number">2</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ul><li>自定义枚举值</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">enum</span> 枚举名 &#123;</span><br><span class="line">  枚举属性<span class="number">1</span> = 枚举值,</span><br><span class="line">  枚举属性<span class="number">2</span> = 枚举值</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ul><li>如果枚举值有序，且步长为1，则可以省略后续枚举值定义</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">enum</span> 枚举名 &#123;</span><br><span class="line">  枚举属性<span class="number">1</span> = <span class="number">0</span>,</span><br><span class="line">  枚举属性<span class="number">2</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="使用枚举作为变量类型"><a href="#使用枚举作为变量类型" class="headerlink" title="使用枚举作为变量类型"></a>使用枚举作为变量类型</h2><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名: 枚举名 = 枚举名.枚举值;</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/03/19/TS%E7%9A%84%E6%9E%9A%E4%B8%BE/</id>
    <link href="https://loli.fj.cn/2026/03/19/TS%E7%9A%84%E6%9E%9A%E4%B8%BE/"/>
    <published>2026-03-19T00:15:02.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>TS的枚举学习笔记</p>]]>
    </summary>
    <title>【笔记】TS的枚举</title>
    <updated>2026-04-07T01:30:48.459Z</updated>
  </entry>
  <entry>
    <author>
      <name>6Jyc5p+a</name>
    </author>
    <category term="TypeScript学习指北" scheme="https://loli.fj.cn/categories/TypeScript%E5%AD%A6%E4%B9%A0%E6%8C%87%E5%8C%97/"/>
    <category term="JavaScript" scheme="https://loli.fj.cn/tags/JavaScript/"/>
    <category term="TypeScript" scheme="https://loli.fj.cn/tags/TypeScript/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">116259121837982375</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>TS的面向对象学习笔记</p><span id="more"></span><h2 id="类"><a href="#类" class="headerlink" title="类"></a>类</h2><h3 id="定义类"><a href="#定义类" class="headerlink" title="定义类"></a>定义类</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> 类名 &#123;</span><br><span class="line">  属性名: 数据类型;</span><br><span class="line"></span><br><span class="line">  方法名(形参名: 数据类型): 返回值类型 &#123;</span><br><span class="line">    ...</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h4 id="可选的属性"><a href="#可选的属性" class="headerlink" title="可选的属性"></a>可选的属性</h4><ul><li>通过<code>?</code>定义可选的属性</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> 类名 &#123;</span><br><span class="line">  属性名?: 数据类型;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h4 id="只读的属性"><a href="#只读的属性" class="headerlink" title="只读的属性"></a>只读的属性</h4><ul><li>通过权限修饰符<code>readonly</code>定义只读的属性</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> 类名 &#123;</span><br><span class="line">  <span class="keyword">readonly</span> 属性名: 数据类型;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="创建对象"><a href="#创建对象" class="headerlink" title="创建对象"></a>创建对象</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名: 类名 = <span class="keyword">new</span> 类名();</span><br></pre></td></tr></table></figure><h3 id="权限修饰符"><a href="#权限修饰符" class="headerlink" title="权限修饰符"></a>权限修饰符</h3><table><thead><tr><th>关键字</th><th>权限</th><th>类内是否可以访问成员</th><th>类外是否可以访问成员变量</th><th>是否可以被继承</th></tr></thead><tbody><tr><td><code>public</code></td><td>缺省值，公共权限</td><td>✓</td><td>✓</td><td>✓</td></tr><tr><td><code>protected</code></td><td>保护权限</td><td>✓</td><td>×</td><td>✓</td></tr><tr><td><code>private</code></td><td>私有权限</td><td>✓</td><td>×</td><td>×</td></tr></tbody></table><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> 类名 &#123;</span><br><span class="line">  <span class="keyword">public</span> 属性名<span class="number">1</span>: 数据类型;</span><br><span class="line">  <span class="keyword">protected</span> 属性名<span class="number">2</span>: 数据类型;</span><br><span class="line">  <span class="keyword">private</span> 属性名<span class="number">3</span>: 数据类型;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="构造方法"><a href="#构造方法" class="headerlink" title="构造方法"></a>构造方法</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> 类名 &#123;</span><br><span class="line">  <span class="keyword">private</span> _属性名: 数据类型;</span><br><span class="line"></span><br><span class="line">  <span class="title function_">constructor</span>(<span class="params">属性名: 数据类型</span>) &#123;</span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">_</span>属性名 = 属性名;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h4 id="参数属性"><a href="#参数属性" class="headerlink" title="参数属性"></a>参数属性</h4><ul><li>参数属性是一种语法糖，如果为构造方法的形参添加任意修饰符，那么可以省略属性的定义与初始化</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> 类名 &#123;</span><br><span class="line">  <span class="title function_">constructor</span>(<span class="params"><span class="keyword">private</span> 属性名: 数据类型</span>) &#123;&#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="Getter和Setter方法"><a href="#Getter和Setter方法" class="headerlink" title="Getter和Setter方法"></a>Getter和Setter方法</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> 类名 &#123;</span><br><span class="line">  <span class="keyword">private</span> _属性名: 数据类型;</span><br><span class="line"></span><br><span class="line">  set 属性名(形参名: 数据类型) &#123;</span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">_</span>属性名 = 形参名;</span><br><span class="line">  &#125;</span><br><span class="line"></span><br><span class="line">  get 属性名(): 数据类型 &#123;</span><br><span class="line">    <span class="keyword">return</span> <span class="variable language_">this</span>.<span class="property">_</span>属性名;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="类的继承"><a href="#类的继承" class="headerlink" title="类的继承"></a>类的继承</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> 类名 <span class="keyword">extends</span> 父类名 &#123;</span><br><span class="line">  ...</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="类实现接口"><a href="#类实现接口" class="headerlink" title="类实现接口"></a>类实现接口</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> 类名 <span class="keyword">implements</span> 接口名 &#123;</span><br><span class="line">  ...</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> 类名 <span class="keyword">implements</span> 接口名<span class="number">1</span>, 接口名<span class="number">2</span> &#123;</span><br><span class="line">  ...</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="抽象类"><a href="#抽象类" class="headerlink" title="抽象类"></a>抽象类</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">abstract</span> <span class="keyword">class</span> 抽象类名 &#123;</span><br><span class="line">  <span class="keyword">abstract</span> 抽象方法名();</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="接口"><a href="#接口" class="headerlink" title="接口"></a>接口</h2><h3 id="定义接口"><a href="#定义接口" class="headerlink" title="定义接口"></a>定义接口</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">interface</span> 接口名 &#123;</span><br><span class="line">  属性名: 数据类型;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h4 id="可选的属性-1"><a href="#可选的属性-1" class="headerlink" title="可选的属性"></a>可选的属性</h4><ul><li>通过<code>?</code>定义可选的属性</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">interface</span> 接口名 &#123;</span><br><span class="line">  属性名?: 数据类型;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h4 id="补充接口的定义"><a href="#补充接口的定义" class="headerlink" title="补充接口的定义"></a>补充接口的定义</h4><ul><li>通过同名接口补充接口的定义</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">interface</span> 接口名 &#123;</span><br><span class="line">  属性名<span class="number">1</span>: 数据类型;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">interface</span> 接口名 &#123;</span><br><span class="line">  属性名<span class="number">2</span>: 数据类型;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="使用接口作为变量数据类型"><a href="#使用接口作为变量数据类型" class="headerlink" title="使用接口作为变量数据类型"></a>使用接口作为变量数据类型</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名: 接口名;</span><br></pre></td></tr></table></figure><ul><li>通过交叉类型使用多个接口作为变量数据类型</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名: 接口名<span class="number">1</span> &amp; 接口名<span class="number">2</span>;</span><br></pre></td></tr></table></figure><h3 id="接口的继承"><a href="#接口的继承" class="headerlink" title="接口的继承"></a>接口的继承</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">interface</span> 接口名 <span class="keyword">extends</span> 父接口名 &#123;</span><br><span class="line">  ...</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="函数的调用签名"><a href="#函数的调用签名" class="headerlink" title="函数的调用签名"></a>函数的调用签名</h3><ul><li>定义一个变量本身是一个可以调用的函数</li></ul><h4 id="声明"><a href="#声明" class="headerlink" title="声明"></a>声明</h4><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">interface</span> 接口名 &#123;</span><br><span class="line">  (形参名: 形参数据类型): 返回值类型;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h4 id="定义"><a href="#定义" class="headerlink" title="定义"></a>定义</h4><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名: 接口名 = <span class="keyword">function</span> (<span class="params">形参名: 形参数据类型</span>): 返回值类型 &#123;</span><br><span class="line">  <span class="keyword">return</span> 返回值;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h4 id="调用"><a href="#调用" class="headerlink" title="调用"></a>调用</h4><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(变量名(实参值)); <span class="comment">// 返回值</span></span><br></pre></td></tr></table></figure><h3 id="构造函数调用签名"><a href="#构造函数调用签名" class="headerlink" title="构造函数调用签名"></a>构造函数调用签名</h3><ul><li>定义一个变量本身是一个可以<code>new</code>的构造函数</li></ul><h4 id="声明-1"><a href="#声明-1" class="headerlink" title="声明"></a>声明</h4><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">interface</span> 接口名 &#123;</span><br><span class="line">  <span class="title function_">new</span> (形参名: 形参数据类型): 返回值类型;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h4 id="定义-1"><a href="#定义-1" class="headerlink" title="定义"></a>定义</h4><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名: 接口名 = <span class="keyword">function</span> (<span class="params">形参名: 形参数据类型</span>): 对象类型 &#123;</span><br><span class="line">  <span class="keyword">return</span> 对象;</span><br><span class="line">&#125; <span class="keyword">as</span> <span class="built_in">unknown</span> <span class="keyword">as</span> 接口名;</span><br></pre></td></tr></table></figure><h4 id="调用-1"><a href="#调用-1" class="headerlink" title="调用"></a>调用</h4><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="keyword">new</span> 变量名(实参值)); <span class="comment">// 对象</span></span><br></pre></td></tr></table></figure><h3 id="索引签名"><a href="#索引签名" class="headerlink" title="索引签名"></a>索引签名</h3><ul><li>定义一个变量本身是可以通过<code>[]</code>取值的可迭代对象</li></ul><h4 id="声明-2"><a href="#声明-2" class="headerlink" title="声明"></a>声明</h4><blockquote><p><code>索引数据类型</code>：只能是<code>number</code>或<code>string</code></p></blockquote><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">interface</span> 接口名 &#123;</span><br><span class="line">  [索引名: 索引数据类型]: 索引返回值类型;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ul><li>如果除了声明索引数据类型的属性之外还声明了其他属性，且这个索引数据类型是<code>string</code>类型，则其他的属性的返回值类型必须是索引数据类型的属性的返回值类型的同集或子集</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">interface</span> 接口名 &#123;</span><br><span class="line">  [索引名: <span class="built_in">string</span>]: <span class="built_in">any</span>;</span><br><span class="line">  <span class="attr">key</span>: <span class="built_in">string</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ul><li>如果同时声明2个索引数据类型的属性，索引数据类型<code>number</code>的返回值类型必须是索引数据类型<code>string</code>的返回值类型的同集或子集<ul><li>原因是通过索引获取数据时，<code>变量名[0]</code>实质上会被JS转换为<code>变量名[&quot;0&quot;]</code></li></ul></li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">interface</span> 接口名 &#123;</span><br><span class="line">  [索引名: 索引数据类型<span class="number">1</span>]: 索引返回值类型;</span><br><span class="line">  [索引名: 索引数据类型<span class="number">2</span>]: 索引返回值类型;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h4 id="定义-2"><a href="#定义-2" class="headerlink" title="定义"></a>定义</h4><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名: 接口名 = [值, 值]</span><br></pre></td></tr></table></figure><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名: 接口名 = &#123; 属性名<span class="number">1</span>: 值, 属性名<span class="number">2</span>: 值 &#125;</span><br></pre></td></tr></table></figure><h4 id="调用-2"><a href="#调用-2" class="headerlink" title="调用"></a>调用</h4><ul><li>如果索引数据类型为<code>number</code>，则索引名为数字，否则索引名为属性名</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(变量名[索引名]);</span><br></pre></td></tr></table></figure><h2 id="this"><a href="#this" class="headerlink" title="this"></a>this</h2><ul><li><code>this</code>的数据类型默认是<code>any</code></li></ul><h3 id="修改配置文件"><a href="#修改配置文件" class="headerlink" title="修改配置文件"></a>修改配置文件</h3><ul><li>修改配置文件，禁止<code>this</code>自动推导数据类型为<code>any</code></li></ul><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">  &quot;compilerOptions&quot;: &#123;</span><br><span class="line">    &quot;noImplicitThis&quot;: true</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="显式指定this的数据类型"><a href="#显式指定this的数据类型" class="headerlink" title="显式指定this的数据类型"></a>显式指定<code>this</code>的数据类型</h3><ul><li>将<code>this</code>作为函数的第一个形参，并指定数据类型</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">fn</span>(<span class="params"><span class="attr">this</span>: &#123;&#125;, <span class="attr">arg</span>: <span class="built_in">number</span></span>) &#123;&#125;</span><br><span class="line"></span><br><span class="line">fn.<span class="title function_">call</span>(&#123;&#125;, <span class="number">0</span>);</span><br></pre></td></tr></table></figure><h3 id="this的内置工具"><a href="#this的内置工具" class="headerlink" title="this的内置工具"></a><code>this</code>的内置工具</h3><h4 id="提取this的数据类型"><a href="#提取this的数据类型" class="headerlink" title="提取this的数据类型"></a>提取this的数据类型</h4><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">fn</span>(<span class="params"></span>) &#123;&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">type</span> <span class="title class_">FnType</span> = <span class="keyword">typeof</span> fn;</span><br><span class="line"><span class="keyword">type</span> <span class="title class_">FnThisType</span> = <span class="title class_">ThisParameterType</span>&lt;<span class="title class_">FnType</span>&gt;;</span><br></pre></td></tr></table></figure><h4 id="删除this的数据类型"><a href="#删除this的数据类型" class="headerlink" title="删除this的数据类型"></a>删除this的数据类型</h4><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">fn</span>(<span class="params"></span>) &#123;&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">type</span> <span class="title class_">FnType</span> = <span class="keyword">typeof</span> fn;</span><br><span class="line"><span class="keyword">type</span> <span class="title class_">FnNoThisType</span> = <span class="title class_">OmitThisParameter</span>&lt;<span class="title class_">FnType</span>&gt;;</span><br></pre></td></tr></table></figure><h5 id="绑定上下文的this类型"><a href="#绑定上下文的this类型" class="headerlink" title="绑定上下文的this类型"></a>绑定上下文的<code>this</code>类型</h5><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">interface</span> <span class="title class_">Inf</span> &#123;</span><br><span class="line">  <span class="attr">key</span>: <span class="title class_">InfKey</span>;</span><br><span class="line">  <span class="title function_">fn</span>(): <span class="built_in">void</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">interface</span> <span class="title class_">InfKey</span> &#123;</span><br><span class="line">  <span class="attr">k</span>: <span class="built_in">string</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> <span class="attr">obj</span>: <span class="title class_">Inf</span> &amp; <span class="title class_">ThisType</span>&lt;<span class="title class_">InfKey</span>&gt; = &#123;</span><br><span class="line">  <span class="attr">key</span>: &#123;</span><br><span class="line">    <span class="attr">k</span>: <span class="string">&quot;v&quot;</span></span><br><span class="line">  &#125;,</span><br><span class="line">  <span class="attr">fn</span>: <span class="keyword">function</span> (<span class="params"></span>) &#123;</span><br><span class="line">    <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="variable language_">this</span>.<span class="property">k</span>);</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">obj.<span class="property">fn</span>.<span class="title function_">call</span>(obj.<span class="property">key</span>)</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/03/18/TS%E7%9A%84%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1/</id>
    <link href="https://loli.fj.cn/2026/03/18/TS%E7%9A%84%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1/"/>
    <published>2026-03-18T23:54:05.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>TS的面向对象学习笔记</p>]]>
    </summary>
    <title>【笔记】TS的面向对象</title>
    <updated>2026-04-07T01:30:48.460Z</updated>
  </entry>
  <entry>
    <author>
      <name>6Jyc5p+a</name>
    </author>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">116259113885950152</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>JSDelivr是一款开源的免费公共CDN。它是目前第二受欢迎的公共CDN。2020年10月14日，JSDelivr成为Bootstrap的官方CDN。（<a href="/302.html?target=https://zh.wikipedia.org/wiki/JSDelivr">维基百科</a>）</p><span id="more"></span><h2 id="npm的CDN"><a href="#npm的CDN" class="headerlink" title="npm的CDN"></a>npm的CDN</h2><figure class="highlight http"><figcaption><span>request</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://cdn.jsdelivr.net/npm/package@version/file</span><br></pre></td></tr></table></figure><ul><li>清除缓存</li></ul><figure class="highlight http"><figcaption><span>request</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://purge.jsdelivr.net/npm/package@version/file</span><br></pre></td></tr></table></figure><h2 id="ESM的CDN"><a href="#ESM的CDN" class="headerlink" title="ESM的CDN"></a>ESM的CDN</h2><figure class="highlight http"><figcaption><span>request</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://esm.run/package@version/file</span><br></pre></td></tr></table></figure><ul><li>清除缓存</li></ul><figure class="highlight http"><figcaption><span>request</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://purge.run/package@version/file</span><br></pre></td></tr></table></figure><h2 id="Github的CDN"><a href="#Github的CDN" class="headerlink" title="Github的CDN"></a>Github的CDN</h2><figure class="highlight http"><figcaption><span>request</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://cdn.jsdelivr.net/gh/user/repo@version/file</span><br></pre></td></tr></table></figure><ul><li>清除缓存</li></ul><figure class="highlight http"><figcaption><span>request</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://purge.jsdelivr.net/gh/user/repo@version/file</span><br></pre></td></tr></table></figure><h2 id="WordPress的CDN"><a href="#WordPress的CDN" class="headerlink" title="WordPress的CDN"></a>WordPress的CDN</h2><figure class="highlight http"><figcaption><span>request</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://cdn.jsdelivr.net/wp/plugins/project/tags/version/file</span><br></pre></td></tr></table></figure><ul><li>清除缓存</li></ul><figure class="highlight http"><figcaption><span>request</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://purge.jsdelivr.net/wp/plugins/project/tags/version/file</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2><h2 id="参考文献"><a href="#参考文献" class="headerlink" title="参考文献"></a>参考文献</h2><p><a href="https://www.jsdelivr.com/">官方文档</a><br><a href="https://cloud.tencent.com/developer/article/1777492">腾讯云开发者社区——极客中心</a></p>]]>
    </content>
    <id>https://loli.fj.cn/2026/03/18/jsDelivr%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</id>
    <link href="https://loli.fj.cn/2026/03/18/jsDelivr%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    <published>2026-03-18T19:34:42.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>JSDelivr是一款开源的免费公共CDN。它是目前第二受欢迎的公共CDN。2020年10月14日，JSDelivr成为Bootstrap的官方CDN。（<a href="/302.html?target=https://zh.wikipedia.org/wiki/JSDelivr">维基百科</a>）</p>]]>
    </summary>
    <title>【笔记】jsDelivr学习笔记</title>
    <updated>2026-04-07T01:30:48.480Z</updated>
  </entry>
  <entry>
    <author>
      <name>6Jyc5p+a</name>
    </author>
    <category term="TypeScript学习指北" scheme="https://loli.fj.cn/categories/TypeScript%E5%AD%A6%E4%B9%A0%E6%8C%87%E5%8C%97/"/>
    <category term="JavaScript" scheme="https://loli.fj.cn/tags/JavaScript/"/>
    <category term="TypeScript" scheme="https://loli.fj.cn/tags/TypeScript/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">116194308030846571</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>TypeScript是由微软进行开发和维护的一种开源的编程语言。TypeScript是JavaScript的严格语法超集，提供了可选的静态类型检查。（<a href="/302.html?target=https://zh.wikipedia.org/wiki/TypeScript">维基百科</a>）</p><p>TypeScript本质上是JavaScript的超集，所以JavaScript的所有用法都可以在TypeScript上直接使用，本文只介绍TypeScript的特殊用法</p><span id="more"></span><h2 id="编译器"><a href="#编译器" class="headerlink" title="编译器"></a>编译器</h2><h3 id="下载依赖"><a href="#下载依赖" class="headerlink" title="下载依赖"></a>下载依赖</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install -g typescript</span><br></pre></td></tr></table></figure><h3 id="编译生成JS文件"><a href="#编译生成JS文件" class="headerlink" title="编译生成JS文件"></a>编译生成JS文件</h3><blockquote><p><code>-w</code>：监视模式，每当源码发生改变就立即执行编译</p></blockquote><h4 id="编译指定文件"><a href="#编译指定文件" class="headerlink" title="编译指定文件"></a>编译指定文件</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tsc &lt;file&gt;.ts</span><br></pre></td></tr></table></figure><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tsc &lt;file_1&gt;.ts &lt;file_2&gt;.ts</span><br></pre></td></tr></table></figure><h4 id="根据配置文件编译指定文件"><a href="#根据配置文件编译指定文件" class="headerlink" title="根据配置文件编译指定文件"></a>根据配置文件编译指定文件</h4><ul><li>初始化配置文件</li></ul><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tsc --init</span><br></pre></td></tr></table></figure><ul><li>修改配置文件</li></ul><blockquote><p><code>compilerOptions.outDir</code>：指定输出目录<br><code>include</code>：指定包含的文件或目录<br><code>exclude</code>：指定排除的文件或目录</p></blockquote><figure class="highlight json"><figcaption><span>tsconfig.json</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;compilerOptions&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;outDir&quot;</span><span class="punctuation">:</span> <span class="string">&quot;./&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;include&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;./&quot;</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;exclude&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;./dist&quot;</span><span class="punctuation">]</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tsc</span><br></pre></td></tr></table></figure><h2 id="变量"><a href="#变量" class="headerlink" title="变量"></a>变量</h2><h3 id="声明变量"><a href="#声明变量" class="headerlink" title="声明变量"></a>声明变量</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名: 数据类型;</span><br></pre></td></tr></table></figure><ul><li>自动类型推导，声明变量时的数据类型为<code>any</code>类型</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名;</span><br></pre></td></tr></table></figure><h3 id="定义变量"><a href="#定义变量" class="headerlink" title="定义变量"></a>定义变量</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名: 数据类型 = 值;</span><br></pre></td></tr></table></figure><ul><li>自动类型推导，定义变量时的数据类型根据值的类型决定</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名 = 值;</span><br></pre></td></tr></table></figure><h2 id="常量"><a href="#常量" class="headerlink" title="常量"></a>常量</h2><h3 id="定义常量"><a href="#定义常量" class="headerlink" title="定义常量"></a>定义常量</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名: 数据类型 = 值;</span><br></pre></td></tr></table></figure><ul><li>自动类型推导，常量的数据类型为字面量类型</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名 = 值;</span><br></pre></td></tr></table></figure><h2 id="基本数据类型"><a href="#基本数据类型" class="headerlink" title="基本数据类型"></a>基本数据类型</h2><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名: <span class="built_in">number</span> = <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> 变量名: <span class="built_in">string</span> = <span class="string">&quot;&quot;</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> 变量名: <span class="built_in">boolean</span> = <span class="literal">false</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> 变量名: <span class="literal">null</span> = <span class="literal">null</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> 变量名: <span class="literal">undefined</span> = <span class="literal">undefined</span>;</span><br></pre></td></tr></table></figure><h3 id="进制表示"><a href="#进制表示" class="headerlink" title="进制表示"></a>进制表示</h3><ul><li>描述二进制的数值，需要以<code>0b</code>开头</li></ul><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> binary = <span class="number">0b1</span>;</span><br></pre></td></tr></table></figure><ul><li>描述八进制的数值，需要以<code>0o</code>开头</li></ul><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> octal = <span class="number">0o7</span>;</span><br></pre></td></tr></table></figure><ul><li>描述十六进制的数值，需要以<code>0x</code>开头</li></ul><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> hexadecimal = <span class="number">0xF</span>;</span><br></pre></td></tr></table></figure><h2 id="数组类型"><a href="#数组类型" class="headerlink" title="数组类型"></a>数组类型</h2><ul><li>数组中只能存放相同类型的元素</li></ul><h3 id="定义数组元素的数据类型"><a href="#定义数组元素的数据类型" class="headerlink" title="定义数组元素的数据类型"></a>定义数组元素的数据类型</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名: 数据类型[] = [值, 值];</span><br></pre></td></tr></table></figure><h2 id="元组类型"><a href="#元组类型" class="headerlink" title="元组类型"></a>元组类型</h2><ul><li>元组中可以存放不同类型的元素</li></ul><h3 id="定义元祖元素的数据类型"><a href="#定义元祖元素的数据类型" class="headerlink" title="定义元祖元素的数据类型"></a>定义元祖元素的数据类型</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名: [数据类型, 数据类型] = [值, 值];</span><br></pre></td></tr></table></figure><h2 id="对象类型"><a href="#对象类型" class="headerlink" title="对象类型"></a>对象类型</h2><h3 id="定义对象数据类型"><a href="#定义对象数据类型" class="headerlink" title="定义对象数据类型"></a>定义对象数据类型</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名: <span class="built_in">object</span> = &#123;</span><br><span class="line">  属性名: 值</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名: &#123;&#125; = &#123;</span><br><span class="line">  属性名: 值</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="定义对象属性的数据类型"><a href="#定义对象属性的数据类型" class="headerlink" title="定义对象属性的数据类型"></a>定义对象属性的数据类型</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名: &#123; 属性名: 数据类型 &#125; = &#123;</span><br><span class="line">  属性名: 值</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名: &#123; 属性名<span class="number">1</span>: 数据类型, 属性名<span class="number">2</span>: 数据类型 &#125; = &#123;</span><br><span class="line">  属性名<span class="number">1</span>: 值,</span><br><span class="line">  属性名<span class="number">2</span>: 值</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><ul><li>如果通过多行定义多个属性，可以省略<code>,</code></li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名: &#123;</span><br><span class="line">  属性名<span class="number">1</span>: 数据类型</span><br><span class="line">  属性名<span class="number">2</span>: 数据类型</span><br><span class="line">&#125; = &#123;</span><br><span class="line">  属性名<span class="number">1</span>: 值,</span><br><span class="line">  属性名<span class="number">2</span>: 值</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><ul><li>自动类型推导，属性的数据类型为<code>any</code>类型</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名: &#123; 属性名 &#125; = &#123;</span><br><span class="line">  属性名: 值</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h4 id="可选的属性"><a href="#可选的属性" class="headerlink" title="可选的属性"></a>可选的属性</h4><ul><li>通过<code>?</code>定义可选的属性</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名: &#123; 属性名?: 数据类型 &#125; = &#123;</span><br><span class="line">  属性名: 值</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><ul><li>可选的对象属性的数据类型实质上是这个数据类型与<code>undefined</code>类型的联合类型（<code>数据类型 | undefined</code>）</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名: &#123; 属性名?: 数据类型 | <span class="literal">undefined</span> &#125; = &#123;</span><br><span class="line">  属性名: 值</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h4 id="只读的属性"><a href="#只读的属性" class="headerlink" title="只读的属性"></a>只读的属性</h4><ul><li>通过权限修饰符<code>readonly</code>定义只读的属性</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名: &#123; <span class="keyword">readonly</span> 属性名: 数据类型 &#125; = &#123;</span><br><span class="line">  属性名: 值</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="严格字面量赋值检测"><a href="#严格字面量赋值检测" class="headerlink" title="严格字面量赋值检测"></a>严格字面量赋值检测</h3><ul><li>首次给类型为非空对象的变量赋值时，TypeScript<strong>会</strong>采用严格字面量赋值检测，此时要求对象属性与类型定义的接口完全相同，不能出现多余属性</li><li>如果不是首次给变量赋值，TypeScript<strong>不会</strong>采用严格字面量赋值检测，可以出现多余属性</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名<span class="number">1</span>: &#123; 属性名<span class="number">1</span>: 数据类型, 属性名<span class="number">2</span>: 数据类型 &#125; = &#123;</span><br><span class="line">  属性名<span class="number">1</span>: 值,</span><br><span class="line">  属性名<span class="number">2</span>: 值</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> 变量名<span class="number">2</span>: &#123; 属性名<span class="number">1</span>: 数据类型 &#125; = 变量名<span class="number">1</span>;</span><br></pre></td></tr></table></figure><h3 id="对象所有属性的联合类型"><a href="#对象所有属性的联合类型" class="headerlink" title="对象所有属性的联合类型"></a>对象所有属性的联合类型</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">interface</span> 接口名 &#123;</span><br><span class="line">  属性名<span class="number">1</span>: 数据类型;</span><br><span class="line">  属性名<span class="number">2</span>: 数据类型;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> 变量名: keyof 接口名;</span><br></pre></td></tr></table></figure><ul><li>相当于对象所有属性的联合类型</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">interface</span> 接口名 &#123;</span><br><span class="line">  属性名<span class="number">1</span>: 数据类型;</span><br><span class="line">  属性名<span class="number">2</span>: 数据类型;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> 变量名: <span class="string">&quot;属性名1&quot;</span> | <span class="string">&quot;属性名2&quot;</span>;</span><br></pre></td></tr></table></figure><h2 id="函数类型"><a href="#函数类型" class="headerlink" title="函数类型"></a>函数类型</h2><h3 id="定义函数数据类型"><a href="#定义函数数据类型" class="headerlink" title="定义函数数据类型"></a>定义函数数据类型</h3><h4 id="通过函数声明定义函数"><a href="#通过函数声明定义函数" class="headerlink" title="通过函数声明定义函数"></a>通过函数声明定义函数</h4><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> 函数名() &#123;&#125;</span><br></pre></td></tr></table></figure><h4 id="通过函数表达式定义函数"><a href="#通过函数表达式定义函数" class="headerlink" title="通过函数表达式定义函数"></a>通过函数表达式定义函数</h4><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 函数名: <span class="function">() =&gt;</span> <span class="built_in">void</span> = <span class="keyword">function</span> (<span class="params"></span>) &#123;&#125;;</span><br></pre></td></tr></table></figure><ul><li>自动类型推导</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 函数名 = <span class="keyword">function</span> (<span class="params"></span>) &#123;&#125;;</span><br></pre></td></tr></table></figure><h3 id="定义形参的数据类型"><a href="#定义形参的数据类型" class="headerlink" title="定义形参的数据类型"></a>定义形参的数据类型</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> 函数名(形参名: 数据类型) &#123;&#125;</span><br></pre></td></tr></table></figure><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> 函数名(形参名<span class="number">1</span>: 数据类型, 形参名<span class="number">2</span>: 数据类型) &#123;&#125;</span><br></pre></td></tr></table></figure><ul><li>自动类型推导，形参的数据类型为<code>any</code>类型</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> 函数名(形参名) &#123;&#125;</span><br></pre></td></tr></table></figure><h4 id="不定长形参"><a href="#不定长形参" class="headerlink" title="不定长形参"></a>不定长形参</h4><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> 函数名(...形参名: 数据类型[]) &#123;&#125;</span><br></pre></td></tr></table></figure><h4 id="可选的形参"><a href="#可选的形参" class="headerlink" title="可选的形参"></a>可选的形参</h4><ul><li>通过<code>?</code>定义可选的形参</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> 函数名(形参名?: 数据类型) &#123;&#125;</span><br></pre></td></tr></table></figure><ul><li>可选的函数形参的数据类型实质上是这个数据类型与<code>undefined</code>类型的联合类型（<code>数据类型 | undefined</code>）</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> 函数名(形参名?: 数据类型 | <span class="literal">undefined</span>) &#123;&#125;</span><br></pre></td></tr></table></figure><ul><li>函数具有多个形参时，可选的形参应该放在末尾</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> 函数名(形参名<span class="number">1</span>: 数据类型, 形参名<span class="number">2</span>?: 数据类型) &#123;&#125;</span><br></pre></td></tr></table></figure><h4 id="形参的默认值"><a href="#形参的默认值" class="headerlink" title="形参的默认值"></a>形参的默认值</h4><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> 函数名(形参名: 数据类型 = 默认值) &#123;&#125;</span><br></pre></td></tr></table></figure><ul><li>数据类型推导</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> 函数名(形参名 = 默认值) &#123;&#125;</span><br></pre></td></tr></table></figure><ul><li>有默认值的形参可以不传递实参，也可以接收<code>unedfined</code>值作为实参，最终实参的值都是默认值</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> 函数名(形参名 = <span class="string">&quot;默认值&quot;</span>) &#123;</span><br><span class="line">  <span class="variable language_">console</span>.<span class="title function_">log</span>(形参名);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">函数名(); <span class="comment">// &quot;默认值&quot;</span></span><br><span class="line">函数名(<span class="literal">undefined</span>); <span class="comment">// &quot;默认值&quot;</span></span><br></pre></td></tr></table></figure><h4 id="函数作为实参"><a href="#函数作为实参" class="headerlink" title="函数作为实参"></a>函数作为实参</h4><ul><li>函数作为其他函数的实参时，这个函数的形参最好直接数据类型推导，因为在其他函数已经定义了这个函数的形参类型</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> 函数名(<span class="attr">f</span>: <span class="function">(<span class="params">形参名: 数据类型</span>) =&gt;</span> <span class="built_in">void</span>) &#123;&#125;</span><br><span class="line"></span><br><span class="line">函数名(<span class="keyword">function</span> (<span class="params">形参名</span>) &#123;&#125;);</span><br></pre></td></tr></table></figure><ul><li>函数作为其他函数的实参时，这个函数的形参个数无需匹配</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> 函数名(<span class="attr">f</span>: <span class="function">(<span class="params">形参名<span class="number">1</span>: 数据类型, 形参名<span class="number">2</span>: 数据类型</span>) =&gt;</span> <span class="built_in">void</span>) &#123;&#125;</span><br><span class="line"></span><br><span class="line">函数名(<span class="keyword">function</span> (<span class="params">形参名<span class="number">1</span></span>) &#123;&#125;);</span><br></pre></td></tr></table></figure><h3 id="定义返回值的数据类型"><a href="#定义返回值的数据类型" class="headerlink" title="定义返回值的数据类型"></a>定义返回值的数据类型</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> 函数名(): 数据类型 &#123;</span><br><span class="line">  <span class="keyword">return</span> 返回值;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ul><li>自动类型推导，返回值的数据类型为<code>void</code>类型</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> 函数名() &#123;&#125;</span><br></pre></td></tr></table></figure><h4 id="空类型"><a href="#空类型" class="headerlink" title="空类型"></a>空类型</h4><ul><li><code>void</code>类型用于描述一个函数没有返回值</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> 函数名(): <span class="built_in">void</span> &#123;&#125;</span><br></pre></td></tr></table></figure><ul><li>如果如果函数的返回值类型为<code>void</code>，返回值也可以是<code>undefined</code></li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> 函数名(): <span class="built_in">void</span> &#123;</span><br><span class="line">  <span class="keyword">return</span> <span class="literal">undefined</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ul><li>如果函数的返回值类型<code>void</code>是由上下文推导而得来的，那么不强制要求_不返回任何数据或返回<code>undefined</code><em>，否则必须_不返回任何数据或返回<code>undefined</code></em></li></ul><h4 id="永无类型"><a href="#永无类型" class="headerlink" title="永无类型"></a>永无类型</h4><ul><li><code>never</code>类型可以用于描述一个函数永远不会成功得到返回值，比如：死循环、抛出异常</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> 函数名(): <span class="built_in">never</span> &#123;</span><br><span class="line">  <span class="keyword">while</span> (<span class="literal">true</span>);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> 函数名(): <span class="built_in">never</span> &#123;</span><br><span class="line">  <span class="keyword">throw</span> <span class="keyword">new</span> <span class="title class_">Error</span>();</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ul><li><code>never</code>类型也可以用于描述不应当被赋值为这个类型的变量，如果被赋值为这个类型的变量，则会编译期报错</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> 函数名(形参名: 数据类型) &#123;</span><br><span class="line">  <span class="keyword">if</span> (<span class="keyword">typeof</span> 形参名 === <span class="string">&quot;string&quot;</span>) &#123;</span><br><span class="line">    <span class="keyword">let</span> 变量名: <span class="built_in">never</span> = 形参名;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="函数的重载"><a href="#函数的重载" class="headerlink" title="函数的重载"></a>函数的重载</h3><ol><li>编写重载签名</li><li>编写通用的实现</li><li>调用重载函数，而不要调用通用函数</li></ol><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">fn</span>(<span class="params"><span class="attr">arg1</span>: <span class="built_in">string</span>, <span class="attr">arg2</span>: <span class="built_in">string</span></span>)</span><br><span class="line"><span class="keyword">function</span> <span class="title function_">fn</span>(<span class="params"><span class="attr">arg1</span>: <span class="built_in">number</span>, <span class="attr">arg2</span>: <span class="built_in">number</span></span>)</span><br><span class="line"><span class="keyword">function</span> <span class="title function_">fn</span>(<span class="params"><span class="attr">arg1</span>: <span class="built_in">any</span>, <span class="attr">arg1</span>: <span class="built_in">any</span></span>) &#123;</span><br><span class="line">  <span class="variable language_">console</span>.<span class="title function_">log</span>(arg1 + arg2);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="title function_">fn</span>(<span class="number">0</span>, <span class="number">0</span>); <span class="comment">// 0</span></span><br><span class="line"><span class="title function_">fn</span>(<span class="string">&quot;0&quot;</span>, <span class="string">&quot;0&quot;</span>); <span class="comment">// &quot;00&quot;</span></span><br></pre></td></tr></table></figure><h2 id="字面量类型"><a href="#字面量类型" class="headerlink" title="字面量类型"></a>字面量类型</h2><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名: 值 = 值;</span><br></pre></td></tr></table></figure><h2 id="任意类型"><a href="#任意类型" class="headerlink" title="任意类型"></a>任意类型</h2><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名: <span class="built_in">any</span> = 值;</span><br></pre></td></tr></table></figure><ul><li><code>any</code>类型的变量<strong>可以</strong>赋值给非<code>any</code>类型的变量，所以<strong>会</strong>污染原本有数据类型的变量，这个变量的数据类型最终会根据传递的数据重新自动推导</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> <span class="attr">a</span>: <span class="built_in">any</span> = <span class="string">&quot;&quot;</span>;</span><br><span class="line"><span class="keyword">let</span> <span class="attr">b</span>: <span class="built_in">number</span>;</span><br><span class="line"></span><br><span class="line">b = a;</span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="keyword">typeof</span> b); <span class="comment">// &quot;string&quot;</span></span><br></pre></td></tr></table></figure><ul><li><code>any</code>类型的变量<strong>可以</strong>直接调用属性和方法</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> <span class="attr">a</span>: <span class="built_in">any</span> = <span class="string">&quot;&quot;</span>;</span><br><span class="line"></span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(a.<span class="property">length</span>);</span><br></pre></td></tr></table></figure><h2 id="未知类型"><a href="#未知类型" class="headerlink" title="未知类型"></a>未知类型</h2><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名: <span class="built_in">unknown</span> = 值;</span><br></pre></td></tr></table></figure><ul><li><code>unknow</code>类型的变量<strong>不可以</strong>赋值给非<code>unknow</code>类型的变量，所以<strong>不会</strong>污染原本有数据类型的变量</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> <span class="attr">a</span>: <span class="built_in">unknown</span>;</span><br><span class="line"><span class="keyword">let</span> <span class="attr">b</span>: <span class="built_in">number</span>;</span><br><span class="line"><span class="keyword">let</span> <span class="attr">c</span>: <span class="built_in">unknown</span>;</span><br><span class="line"></span><br><span class="line"><span class="comment">// b = a;</span></span><br><span class="line">c = a;</span><br></pre></td></tr></table></figure><ul><li><code>unknown</code>类型的变量<strong>不可以</strong>直接操作任意属性和方法，但是可以通过数据类型转换，从而调用属性和方法</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> <span class="attr">a</span>: <span class="built_in">unknown</span> = <span class="string">&quot;&quot;</span>;</span><br><span class="line"><span class="keyword">let</span> <span class="attr">b</span>: <span class="built_in">string</span>;</span><br><span class="line"></span><br><span class="line"><span class="comment">// console.log(a.length);</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> (<span class="keyword">typeof</span> a === <span class="string">&quot;string&quot;</span>) &#123;</span><br><span class="line">  b = a;</span><br><span class="line">  <span class="variable language_">console</span>.<span class="title function_">log</span>(b.<span class="property">length</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">b = a <span class="keyword">as</span> <span class="built_in">string</span>;</span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(b.<span class="property">length</span>);</span><br><span class="line"></span><br><span class="line">b = &lt;<span class="built_in">string</span>&gt;a;</span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(b.<span class="property">length</span>);</span><br></pre></td></tr></table></figure><h2 id="联合类型"><a href="#联合类型" class="headerlink" title="联合类型"></a>联合类型</h2><ul><li>只要满足一种数据类型就可以匹配成功</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名: 数据类型 | 数据类型;</span><br></pre></td></tr></table></figure><h2 id="交叉类型"><a href="#交叉类型" class="headerlink" title="交叉类型"></a>交叉类型</h2><ul><li>必须满足两种数据类型才可以匹配成功<ul><li>如果是非类或接口之间的交叉类型，那么实际为<code>never</code>类型</li><li>如果是类或接口之间的交叉类型，那么必须满足两者定义的所有属性才可以匹配成功</li></ul></li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名: 数据类型 &amp; 数据类型;</span><br></pre></td></tr></table></figure><h2 id="类型别名"><a href="#类型别名" class="headerlink" title="类型别名"></a>类型别名</h2><h3 id="定义类型别名"><a href="#定义类型别名" class="headerlink" title="定义类型别名"></a>定义类型别名</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">type</span> 类型别名 = 数据类型;</span><br></pre></td></tr></table></figure><h3 id="使用类型别名"><a href="#使用类型别名" class="headerlink" title="使用类型别名"></a>使用类型别名</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名: 类型别名;</span><br></pre></td></tr></table></figure><h2 id="类型守卫"><a href="#类型守卫" class="headerlink" title="类型守卫"></a>类型守卫</h2><ul><li>类型守卫可以实现类型缩小</li></ul><h3 id="typeof操作符"><a href="#typeof操作符" class="headerlink" title="typeof操作符"></a>typeof操作符</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> <span class="attr">a</span>: <span class="built_in">string</span> | <span class="literal">null</span>;</span><br><span class="line"><span class="keyword">let</span> <span class="attr">b</span>: <span class="built_in">string</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> (<span class="keyword">typeof</span> a === <span class="string">&quot;string&quot;</span>) &#123;</span><br><span class="line">  b = a;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="instanceof操作符"><a href="#instanceof操作符" class="headerlink" title="instanceof操作符"></a>instanceof操作符</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> <span class="attr">a</span>: <span class="title class_">Date</span> | <span class="literal">null</span>;</span><br><span class="line"><span class="keyword">let</span> <span class="attr">b</span>: <span class="title class_">Date</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> (a <span class="keyword">instanceof</span> <span class="title class_">Date</span>) &#123;</span><br><span class="line">  b = a;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="in操作符"><a href="#in操作符" class="headerlink" title="in操作符"></a>in操作符</h3><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> <span class="attr">a</span>: &#123; <span class="attr">key1</span>: <span class="built_in">string</span> &#125; | &#123; <span class="attr">key2</span>: <span class="built_in">number</span> &#125;;</span><br><span class="line"><span class="keyword">let</span> <span class="attr">b</span>: <span class="built_in">string</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> (<span class="string">&quot;key1&quot;</span> <span class="keyword">in</span> a) &#123;</span><br><span class="line">  b = a.<span class="property">key</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="类型断言"><a href="#类型断言" class="headerlink" title="类型断言"></a>类型断言</h2><ul><li>类型断言可以实现类型缩小，也可以实现类型放大</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> <span class="attr">a</span>: <span class="built_in">unknown</span> = <span class="string">&quot;&quot;</span>;</span><br><span class="line"><span class="keyword">let</span> <span class="attr">b</span>: <span class="built_in">string</span>;</span><br><span class="line"></span><br><span class="line">b = a <span class="keyword">as</span> <span class="built_in">string</span>;</span><br></pre></td></tr></table></figure><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> <span class="attr">a</span>: <span class="built_in">unknown</span> = <span class="string">&quot;&quot;</span>;</span><br><span class="line"><span class="keyword">let</span> <span class="attr">b</span>: <span class="built_in">string</span>;</span><br><span class="line"></span><br><span class="line">b = &lt;<span class="built_in">string</span>&gt;a;</span><br></pre></td></tr></table></figure><h3 id="非空类型断言"><a href="#非空类型断言" class="headerlink" title="非空类型断言"></a>非空类型断言</h3><ul><li>告诉编译器，这个变量一定不为空</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> <span class="attr">a</span>: <span class="built_in">string</span> | <span class="literal">null</span>;</span><br><span class="line"><span class="keyword">let</span> <span class="attr">b</span>: <span class="built_in">string</span>;</span><br><span class="line"></span><br><span class="line">b = a!;</span><br></pre></td></tr></table></figure><h3 id="常量类型断言"><a href="#常量类型断言" class="headerlink" title="常量类型断言"></a>常量类型断言</h3><ul><li>告诉编译器，自动类型推导时，全部按照字面量类型</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> a = &#123; <span class="attr">key</span>: <span class="string">&quot;value&quot;</span> &#125; <span class="keyword">as</span> <span class="keyword">const</span>;</span><br><span class="line"><span class="keyword">let</span> <span class="attr">b</span>: <span class="string">&quot;value&quot;</span>;</span><br><span class="line"></span><br><span class="line">b = a.<span class="property">key</span>;</span><br></pre></td></tr></table></figure><h2 id="映射类型"><a href="#映射类型" class="headerlink" title="映射类型"></a>映射类型</h2><ul><li>将旧数据类型映射为新数据类型</li></ul><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">type</span> 映射类型&lt;T&gt; = &#123;</span><br><span class="line">  [<span class="title class_">Property</span> <span class="keyword">in</span> keyof T]: T[<span class="title class_">Property</span>]</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">type</span> 新数据类型名 = 映射类型&lt;旧数据类型名&gt;</span><br></pre></td></tr></table></figure><h3 id="添加或移除修饰符"><a href="#添加或移除修饰符" class="headerlink" title="添加或移除修饰符"></a>添加或移除修饰符</h3><blockquote><p><code>readonly</code>、<code>+readonly</code>：添加<code>readonly</code>修饰符，<code>+</code>为缺省值<br><code>?</code>、<code>+?</code>：添加<code>?</code>修饰符，<code>+</code>为缺省值</p></blockquote><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">type</span> 映射类型&lt;T&gt; = &#123;</span><br><span class="line">  +<span class="keyword">readonly</span> [<span class="title class_">Property</span> <span class="keyword">in</span> keyof T]+?: T[<span class="title class_">Property</span>]</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">type</span> 新数据类型名 = 映射类型&lt;旧数据类型名&gt;</span><br></pre></td></tr></table></figure><blockquote><p><code>-readonly</code>：移除<code>readonly</code>修饰符<br><code>-?</code>：移除<code>?</code>修饰符</p></blockquote><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">type</span> 映射类型&lt;T&gt; = &#123;</span><br><span class="line">  -<span class="keyword">readonly</span> [<span class="title class_">Property</span> <span class="keyword">in</span> keyof T]-?: T[<span class="title class_">Property</span>]</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">type</span> 新数据类型名 = 映射类型&lt;旧数据类型名&gt;</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/03/16/TypeScript%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</id>
    <link href="https://loli.fj.cn/2026/03/16/TypeScript%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    <published>2026-03-16T03:51:31.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>TypeScript是由微软进行开发和维护的一种开源的编程语言。TypeScript是JavaScript的严格语法超集，提供了可选的静态类型检查。（<a href="/302.html?target=https://zh.wikipedia.org/wiki/TypeScript">维基百科</a>）</p>
<p>TypeScript本质上是JavaScript的超集，所以JavaScript的所有用法都可以在TypeScript上直接使用，本文只介绍TypeScript的特殊用法</p>]]>
    </summary>
    <title>【笔记】TypeScript学习笔记</title>
    <updated>2026-04-07T01:30:48.461Z</updated>
  </entry>
  <entry>
    <author>
      <name>6Jyc5p+a</name>
    </author>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">116213682220206062</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>OpenClaw学习笔记</p><span id="more"></span><h2 id="初始化"><a href="#初始化" class="headerlink" title="初始化"></a>初始化</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">openclaw onboard</span><br></pre></td></tr></table></figure><h2 id="修改配置"><a href="#修改配置" class="headerlink" title="修改配置"></a>修改配置</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">openclaw config</span><br></pre></td></tr></table></figure><h2 id="网关"><a href="#网关" class="headerlink" title="网关"></a>网关</h2><h3 id="启动网关"><a href="#启动网关" class="headerlink" title="启动网关"></a>启动网关</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">openclaw gateway start</span><br></pre></td></tr></table></figure><h3 id="停止网关"><a href="#停止网关" class="headerlink" title="停止网关"></a>停止网关</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">openclaw gateway stop</span><br></pre></td></tr></table></figure><h3 id="重启网关"><a href="#重启网关" class="headerlink" title="重启网关"></a>重启网关</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">openclaw gateway restart</span><br></pre></td></tr></table></figure><h3 id="查看网关状态"><a href="#查看网关状态" class="headerlink" title="查看网关状态"></a>查看网关状态</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">openclaw gateway status</span><br></pre></td></tr></table></figure><h2 id="插件"><a href="#插件" class="headerlink" title="插件"></a>插件</h2><h3 id="查看已安装的插件列表"><a href="#查看已安装的插件列表" class="headerlink" title="查看已安装的插件列表"></a>查看已安装的插件列表</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">openclaw plugin list</span><br></pre></td></tr></table></figure><h3 id="安装插件"><a href="#安装插件" class="headerlink" title="安装插件"></a>安装插件</h3><blockquote><p><code>&lt;package&gt;</code>：npm包名</p></blockquote><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">openclaw plugin install &lt;package&gt;</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/03/11/OpenClaw%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</id>
    <link href="https://loli.fj.cn/2026/03/11/OpenClaw%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    <published>2026-03-11T17:36:19.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>OpenClaw学习笔记</p>]]>
    </summary>
    <title>【笔记】OpenClaw学习笔记</title>
    <updated>2026-04-07T01:30:48.434Z</updated>
  </entry>
  <entry>
    <author>
      <name>6Jyc5p+a</name>
    </author>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">116208965765352515</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>OpenClaw报错</p><span id="more"></span><h2 id="报错"><a href="#报错" class="headerlink" title="报错"></a>报错</h2><ul><li>WebUI报错：<code>openclaw origin not allowed (open the Control UI from the gateway host or allow it in gateway.controlUi.allowedOrigins)</code></li></ul><h3 id="原因"><a href="#原因" class="headerlink" title="原因"></a>原因</h3><ul><li>当前域不允许访问</li></ul><h3 id="解决方法"><a href="#解决方法" class="headerlink" title="解决方法"></a>解决方法</h3><ul><li>修改配置文件，配置允许访问的域</li></ul><figure class="highlight json"><figcaption><span>~/.openclaw/openclaw.json</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;gateway&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;controlUi&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;allowedOrigins&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">        <span class="string">&quot;*&quot;</span></span><br><span class="line">      <span class="punctuation">]</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h2 id="报错-1"><a href="#报错-1" class="headerlink" title="报错"></a>报错</h2><ul><li>WebUI报错：<code>control ui requires device identity (use HTTPS or localhost secure context)</code></li></ul><h3 id="原因-1"><a href="#原因-1" class="headerlink" title="原因"></a>原因</h3><ul><li>不允许非HTTPS访问</li></ul><h3 id="解决问题"><a href="#解决问题" class="headerlink" title="解决问题"></a>解决问题</h3><ul><li>修改配置文件，允许非HTTPS访问</li></ul><figure class="highlight json"><figcaption><span>~/.openclaw/openclaw.json</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;gateway&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;controlUi&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;allowedOrigins&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">        <span class="string">&quot;*&quot;</span></span><br><span class="line">      <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;dangerouslyDisableDeviceAuth&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h2 id="踩坑"><a href="#踩坑" class="headerlink" title="踩坑"></a>踩坑</h2><ul><li>WebUI报错：<code>device identity required</code></li></ul><h3 id="原因-2"><a href="#原因-2" class="headerlink" title="原因"></a>原因</h3><ul><li>缺少身份认证</li></ul><h3 id="解决方法-1"><a href="#解决方法-1" class="headerlink" title="解决方法"></a>解决方法</h3><ul><li>访问WebUI时添加查询字符串参数<code>?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</code></li></ul><h2 id="踩坑-1"><a href="#踩坑-1" class="headerlink" title="踩坑"></a>踩坑</h2><ul><li>WebUI报错：<code>unauthorized: gateway token mismatch (open the dashboard URL and paste the token in Control UI settings)</code></li></ul><h3 id="原因-3"><a href="#原因-3" class="headerlink" title="原因"></a>原因</h3><ul><li>身份验证错误</li></ul><h3 id="解决方法-2"><a href="#解决方法-2" class="headerlink" title="解决方法"></a>解决方法</h3><ul><li><p>添加正确的token作为访问WebUI时添加查询字符串参数<code>?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</code></p></li><li><p>查询token</p></li></ul><figure class="highlight json"><figcaption><span>~/.openclaw/openclaw.json</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;gateway&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;auth&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;token&quot;</span><span class="punctuation">:</span> <span class="string">&quot;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2><h2 id="参考文献"><a href="#参考文献" class="headerlink" title="参考文献"></a>参考文献</h2><p><a href="/302.html?target=https://blog.csdn.net/qq_34068440/article/details/157697089">CSDN——临水逸</a><br><a href="https://blog.csdn.net/qq_35702095/article/details/158418298">CSDN——熟悉开机关机重启</a></p>]]>
    </content>
    <id>https://loli.fj.cn/2026/03/10/OpenClaw%E6%8A%A5%E9%94%99/</id>
    <link href="https://loli.fj.cn/2026/03/10/OpenClaw%E6%8A%A5%E9%94%99/"/>
    <published>2026-03-10T21:25:26.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>OpenClaw报错</p>]]>
    </summary>
    <title>【踩坑】OpenClaw报错</title>
    <updated>2026-04-07T01:30:48.434Z</updated>
  </entry>
</feed>
