<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>声明合并 on ZiYang FrontEnd Interview</title><link>https://fe-interview.pangcy.cn/tags/%E5%A3%B0%E6%98%8E%E5%90%88%E5%B9%B6/</link><description>Recent content in 声明合并 on ZiYang FrontEnd Interview</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 06 Mar 2025 13:07:39 +0800</lastBuildDate><atom:link href="https://fe-interview.pangcy.cn/tags/%E5%A3%B0%E6%98%8E%E5%90%88%E5%B9%B6/index.xml" rel="self" type="application/rss+xml"/><item><title>接口与类型别名核心区别</title><link>https://fe-interview.pangcy.cn/docs/typescript/typescript-09/</link><pubDate>Tue, 04 Mar 2025 08:37:03 +0000</pubDate><guid>https://fe-interview.pangcy.cn/docs/typescript/typescript-09/</guid><description>&lt;h2 id="考察点分析">考察点分析 &lt;a href="#%e8%80%83%e5%af%9f%e7%82%b9%e5%88%86%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;p>该题主要考查候选人对TypeScript类型系统设计原则的理解程度，核心评估维度包括：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>类型系统设计理念&lt;/strong>：区分接口(interface)与类型别名(type)在TypeScript中的定位差异&lt;/li>
&lt;li>&lt;strong>声明合并机制&lt;/strong>：理解接口特有的声明合并特性及其使用场景&lt;/li>
&lt;li>&lt;strong>可扩展性对比&lt;/strong>：掌握接口继承与类型别名交叉运算的本质区别&lt;/li>
&lt;li>&lt;strong>工程实践判断&lt;/strong>：根据实际场景选择合适的类型定义方式&lt;/li>
&lt;/ol>
&lt;h2 id="技术解析">技术解析 &lt;a href="#%e6%8a%80%e6%9c%af%e8%a7%a3%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;h3 id="关键知识点">关键知识点 &lt;a href="#%e5%85%b3%e9%94%ae%e7%9f%a5%e8%af%86%e7%82%b9" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;ol>
&lt;li>声明合并（Declaration Merging）&lt;/li>
&lt;li>类型扩展机制&lt;/li>
&lt;li>类型系统设计哲学&lt;/li>
&lt;/ol>
&lt;h3 id="原理剖析">原理剖析 &lt;a href="#%e5%8e%9f%e7%90%86%e5%89%96%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;p>接口的声明合并特性允许&lt;strong>同名接口自动合并成员&lt;/strong>，常用于扩展第三方库类型定义。例如：&lt;/p>



 
 
 

 
 
 
 

 

 &lt;div class="prism-codeblock ">
 &lt;pre id="a1de6f7" class="language-typescript ">
 &lt;code>interface User { name: string }
interface User { age: number }
// 合并结果为 { name: string; age: number }&lt;/code>
 &lt;/pre>
 &lt;/div>
&lt;p>类型别名使用&lt;code>type&lt;/code>定义时，&lt;strong>重复声明会报错&lt;/strong>。这种设计差异源于接口的开放扩展特性（Open-ended）与类型别名的封闭特性。&lt;/p>
&lt;p>在扩展性方面，接口采用&lt;code>extends&lt;/code>继承：&lt;/p>



 
 
 

 
 
 
 

 

 &lt;div class="prism-codeblock ">
 &lt;pre id="107618d" class="language-typescript ">
 &lt;code>interface Animal { name: string }
interface Dog extends Animal { bark(): void }&lt;/code>
 &lt;/pre>
 &lt;/div>
&lt;p>类型别名使用交叉类型实现类似效果：&lt;/p>



 
 
 

 
 
 
 

 

 &lt;div class="prism-codeblock ">
 &lt;pre id="3443246" class="language-typescript ">
 &lt;code>type Animal = { name: string }
type Dog = Animal &amp;amp; { bark(): void }&lt;/code>
 &lt;/pre>
 &lt;/div>
&lt;p>虽然功能相似，但类型别名的交叉运算在复杂类型组合时可能引发意外行为（如联合类型的交叉运算）。&lt;/p></description></item></channel></rss>