TS面試題

1.TS有哪些類型(對比與js)?

關鍵字/語法

用途

示例

any

關閉類型檢查

let a: any = 4

unknown

類型安全的 any

let u: unknown = 4; if (typeof u === 'number') …

never

永不存在的值

function err(): never { throw 0; }

void

無返回值

function f(): void {}

enum / const enum

枚舉

enum Color { Red = 1 }

union(聯合)

“或”關系

string | number

intersection(交叉)

“且”關系

A & B

literal(字面量)

精確值

'GET' / 404 / true

readonly

只讀屬性

readonly x: number

? 可選屬性

interface P { name?: string }

keyof

取鍵聯合

keyof {a:1,b:2} → `'a'

typeof

取變量類型

let p = {x:1}; type T = typeof p

as 類型斷言

(<HTMLElement>el).style

satisfies (4.9+)

保證表達式符合某類型并推斷更精確類型

條件類型

T extends U ? X : Y

infer

在條件類型里提取子類型

映射類型

{ [K in keyof T]: T[K] }

模板字符串類型

` `user-${number}` `

2.type和interface的區別?何時用哪個?

在 90 % 的日常代碼里兩者可以互換;但 interface 可以同名自動合并被類實現/繼承,而 type 可以做聯合、交叉、元組等更復雜的復合類型。官方推薦:描述對象形狀優先用 interface,需要組合、映射、條件類型時用 type

維度

interface

type

官方定位

描述“對象形狀”(shape / contract)

描述任意“類型表達式”

能否同名合并(Declaration Merging)

? 自動合并
interface A {x:1}
interface A {y:2} ? {x:1,y:2}

? 重復定義即報錯

繼承 / 實現

? extends 另一 interface
? implements by class

? 不能被類實現

聯合類型(|)

? 不支持

? type T = A|B

交叉類型(&)

? 不支持

? type T = A & B

元組 / 映射 / 條件 / infer

? 不支持

? 支持全部高級類型體操

基本對象描述

? interface P {name:string}

? type P = {name:string}

遞歸類型

? 支持

? 支持

運行時表現

完全擦除,無差異

完全擦除,無差異

對象、繼承、合并用 interface;其余復雜場景用 type

3.什么是類型斷言?如何使用?

類型斷言(Type Assertion) 就是「開發者比編譯器更懂類型,手動告訴它」的語法糖;它只在 編譯階段 起作用,運行時無任何效果

語法

示例

備注

尖括號(不推薦 JSX 環境)

<HTMLElement>document.querySelector('#app')

易與 JSX 混淆

as 寫法(推薦)

document.querySelector('#app') as HTMLElement

通用、可讀性高

4.什么是泛型

泛型是一種在定義函數、接口或類時不預先指定具體類型,而在使用時再指定類型的特性

T(或其他大寫字母)作為“泛型”占位符,讓同一段代碼能夠復用于不特定的數據類型

// 一顆星 T:傳入什么類型,就返回什么類型
function echo<T>(value: T): T {return value;
}echo<string>('hello'); // T 點亮成 string
echo<number>(42);      // T 點亮成 number

5.裝飾器是什么,如何使用?

裝飾器是一種特殊類型的聲明,可以附加到類、方法、訪問符、屬性或參數上。本質是函數

// 類裝飾器
function sealed(constructor: Function) {Object.seal(constructor);Object.seal(constructor.prototype);
}@sealed
class Greeter {greeting: string;constructor(message: string) {this.greeting = message;}greet() {return "Hello, " + this.greeting;}
}// 方法裝飾器
function log(target: any, propertyKey: string, descriptor: PropertyDescriptor) {let originalMethod = descriptor.value;descriptor.value = function(...args: any[]) {console.log(`Calling ${propertyKey} with`, args);return originalMethod.apply(this, args);};return descriptor;
}class Calculator {@logadd(x: number, y: number) {return x + y;}
}

6.講解一下ts的枚舉?

TypeScript 枚舉在編譯期生成一個鍵值雙向映射對象(數字 enum)或單向對象(字符串 enum),既能當類型又能當;使用 const enum 可徹底消除運行時開銷

TypeScript 中的枚舉(Enums)是一種特殊的對象類型,它允許我們定義一組命名常量。這使得代碼更具可讀性和可維護性,尤其是在處理一組固定的值時非常有用。

enum Direction {Up,Down,Left,Right,
}
console.log(Direction.Up); // 輸出 0

enum Direction {Up = "UP",Down = "DOWN",Left = "LEFT",Right = "RIGHT",
}
console.log(Direction.Up); // 輸出 "UP"

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/91156.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/91156.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/91156.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

借助Early Hints和HarperDB改善網頁性能

對電商網站來說&#xff0c;糟糕的頁面性能可能會增加交易放棄率。一直以來&#xff0c;人們會使用CDN進行緩存從而縮短頁面加載時間&#xff0c;但即便實施了強大的緩存&#xff0c;消費者在通過移動網絡訪問這些網站時可能仍然會需要頻繁等待。最近誕生了一種名為“早期提示”…

MEMS陀螺如何成為無人機穩定飛行的核心?

在無人機自主翱翔、靈活機動并適應多變環境的背后&#xff0c;對其運動狀態——尤其是姿態——的精確感知是基石。作為飛行控制系統&#xff08;飛控&#xff09;的“內耳”&#xff0c;陀螺儀實時捕捉機體繞X、Y、Z三軸的旋轉角速度。這一核心數據是飛控進行姿態解算和維持飛行…

騰訊云拉取docker鏡像失敗怎么辦

ps:我直接按照步驟1和2就解決了 以下內容來自豆包 在騰訊云服務器上拉取 Docker 鏡像失敗&#xff0c;可以按照以下步驟排查和解決&#xff1a; 一、檢查網絡連接 確認服務器網絡正常 bash ping www.baidu.com # 測試公網連通性如果無法 ping 通&#xff0c;檢查服務器防火墻…

Apache FOP實踐——pdf模板引擎

文章目錄 基本概念設計思想具體實踐完整應用 基本概念 Apache FOP&#xff08;Formatting Objects Processor&#xff09;是一個基于Java的開源工具&#xff0c;用于將 XSL-FO&#xff08;XSL Formatting Objects&#xff09; 文檔轉換為PDF、圖像等格式。 設計思想 將內容&…

WebRTC核心組件技術解析:架構、作用與協同機制

引言&#xff1a;WebRTC的技術定位與價值 WebRTC&#xff08;Web Real-Time Communication&#xff09;作為一項開源實時通信標準&#xff0c;已成為瀏覽器原生音視頻交互、P2P數據傳輸的技術基石。自2011年開源以來&#xff0c;其標準化進程由W3C&#xff08;API層&#xff0…

OmniParser:提升工作效率的視覺界面解析工具

OmniParser&#xff1a;基于視覺的用戶界面解析工具在現代軟件開發中&#xff0c;用戶界面的自動化處理變得愈發重要。OmniParser 是一個強大的工具&#xff0c;旨在將用戶界面的截圖解析為結構化的、易于理解的元素&#xff0c;從而顯著提升了大型語言模型&#xff08;如GPT-4…

C#程序員計算器

使用C#語言編寫程序員計算器&#xff0c;使其能夠進行加減乘除和與或非等邏輯運算。 calculator.cs 代碼如下 using System; using System.Numerics; using System.Globalization;namespace Calculator1 {public enum CalcBase { Bin 2, Oct 8, Dec 10, Hex 16 }public en…

國產音頻DA轉換芯片DP7361支持192K六通道24位DA轉換器

產品概述 DP7361 是一款立體聲六通道線性輸出的數模轉換器&#xff0c;內含插值濾波器、Multi-Bit 數模轉換 器、模擬輸出濾波器&#xff0c;支持主流的音頻數據格式。 DP7361 片上集成線性低通模擬濾波器和四階 Multi-Bit Δ-∑調制器&#xff0c;能自動檢測信號頻率和主時鐘頻…

【C51單片機四個按鍵控制流水燈】2022-9-30

緣由C51&#xff0c;四個按鍵控制流水燈-嵌入式-CSDN問答 #include "REG52.h" sbit k1P3^0; sbit k2P3^1; sbit k3P3^2; sbit k4P3^3; unsigned char code lsd[]{127,191,223,239,247,251,253,254};//跑馬燈 void jsys(unsigned char y,unsigned char s){unsigned c…

Python 腳本:獲取公網 IPv4 和 IPv6 地址

本方案適合撥號寬帶網絡環境&#xff0c;當檢測到公網IP地址變更時&#xff0c;可聯動自動觸發MQTT消息推送或郵件通知&#xff0c;實現動態IP的實時監控與告警。 0x01 代碼import re import time import requestsdef extract_ip(html):"""用正則提取 IP&…

數字化轉型-制造業未來藍圖:“超自動化”工廠

超自動化&#xff1a;2040年未來工廠的顛覆性藍圖工業革命250年后的新一輪范式革命 &#xff08;埃森哲&#xff1a;未來的制造&#xff1a;超自動化工廠藍圖有感&#xff09;&#x1f504; 從機械化到超自動化&#xff1a;制造業的第五次進化 自18世紀工業革命始&#xff0c;…

Java 15 新特性解析與代碼示例

Java 15 新特性解析與代碼示例 文章目錄Java 15 新特性解析與代碼示例引言1. 密封類&#xff08;Sealed Classes&#xff09;1.1. 什么是密封類&#xff1f;1.2. 為什么使用密封類&#xff1f;1.3. 語法1.4. 與傳統方法的對比1.5. 使用場景1.6. 示例&#xff1a;結合模式匹配2.…

Vue 3 入門教程 - 1、基礎概念與環境搭建

一、Vue 3 簡介 Vue.js 是一款流行的 JavaScript 前端框架&#xff0c;用于構建用戶界面。Vue 3 作為其最新版本&#xff0c;帶來了諸多令人矚目的新特性與性能優化&#xff0c;為開發者打造了更為高效、靈活的開發體驗。 1.1 Vue 3 的優勢 性能提升&#xff1a;對虛擬 DOM …

SpringBoot之多環境配置全解析

SpringBoot之多環境配置全解析一、多環境配置的核心思路二、3種配置文件格式詳解2.1 properties格式&#xff08;傳統格式&#xff09;1. 基礎配置文件&#xff08;application.properties&#xff09;2. 環境專屬配置文件2.2 yaml/yml格式&#xff08;推薦&#xff09;1. 單文…

uvm-tlm-nonblocking-get-port

前文展示了使用本質為阻塞性質的uvm_blocking_get_port TLM端口的示例&#xff0c;其中接收方會停滯等待發送方完成get任務。類似地&#xff0c;UVM TLM還提供非阻塞類型的uvm_nonblocking_get_port&#xff0c;發送方需通過try_get來檢測get是否成功&#xff0c;或通過can_get…

【NCS隨筆】如何在hello_world添加藍牙功能(一)

如何在hello_world添加藍牙功能&#xff08;一&#xff09;環境準備 硬件&#xff1a;nRF54L15DK 軟件版本&#xff1a;NCS3.0.2 例程&#xff1a;hello_world 宏的配置 # Config loggerCONFIG_LOGyCONFIG_USE_SEGGER_RTTyCONFIG_LOG_BACKEND_RTTyCONFIG_LOG_BACKEND_UARTnONFI…

機器學習——KNN實現手寫數字識別:基于 OpenCV 和 scikit-learn 的實戰教學 (超級超級超級簡單)

用KNN實現手寫數字識別&#xff1a;基于 OpenCV 和 scikit-learn 的實戰教學在這篇文章中&#xff0c;我們將使用 KNN&#xff08;K-Nearest Neighbors&#xff09;算法對手寫數字進行分類識別。我們會用 OpenCV 讀取圖像并預處理數據&#xff0c;用 scikit-learn 構建并訓練模…

【Git】分支

文章目錄理解分支創建分支切換分支合并分支刪除分支合并沖突分支管理策略分支策略bug 分支刪除臨時分支小結理解分支 本章開始介紹 Git 的殺手級功能之一&#xff08;注意是之一&#xff0c;也就是后面還有之二&#xff0c;之三……&#xff09;&#xff1a;分支。分支就是科幻…

【32】C# WinForm入門到精通 ——打開文件OpenFileDialog 【屬性、方法、事件、實例、源碼】

WinForm 是 Windows Form 的簡稱&#xff0c;是基于 .NET Framework 平臺的客戶端&#xff08;PC軟件&#xff09;開發技術&#xff0c;是 C# 語言中的一個重要應用。 .NET 提供了大量 Windows 風格的控件和事件&#xff0c;可以直接拿來使用。 本專欄內容是按照標題序號逐漸…

Wan2.2開源第1天:動態燈光功能開啟創意氛圍新境界

在開源軟件蓬勃發展的今天&#xff0c;每一次新版本的發布都如同在創意的星空中點亮了一顆璀璨的新星。今天&#xff0c;&#xff08;通義萬相國際版wan&#xff09;Wan2.2正式開源&#xff0c;它帶著令人眼前一亮的動態燈光功能驚艷登場&#xff0c;為所有追求創意與氛圍營造的…