背上小書包準備面試之TypeScript篇

目錄

typescript是啥?與javascript的區別?

typescript數據類型?

typescript中枚舉類型?應用場景?

typescript中接口的理解?應用場景?

typescript中泛型的理解?應用場景?

如何在react項目中應用typescript?


這TypeScript我真不知道面試會咋問。。。

哦以前還寫過一篇基礎??

Typescript 基礎易理解-------沖沖沖_ts和js有什么區別_慢谷的博客-CSDN博客

typescript是啥?與javascript的區別?

TypeScript是一個強類型的JavaScript超集,可編譯為純JavaScript。它是一種用于應用級JavaScript開發的語言。(c#、Java就是強類型語言)

區別:

1.TypeScript支持強類型js不支持

2.TypeScript 支持類和接口的概念,使面向對象編程更簡單明確。類用于定義對象的結構和行為,接口則用于定義對象的合同(即對象應該具有的屬性和方法)

3.高級特性:TypeScript 提供了一些 JavaScript 中缺少的高級特性,如元組(Tuple)、枚舉(Enum)、泛型(Generics)等。這些特性有助于更好地描述數據結構和處理邏輯。

4.編譯時類型檢查:TypeScript 在編譯階段進行類型檢查,捕獲并報告類型錯誤。這減少了運行時錯誤,增加了代碼質量和可維護性。

5.生態系統和工具支持:TypeScript 兼容 JavaScript 的生態系統,可以使用現有的 JavaScript 庫和框架。此外,TypeScript 提供了強大的開發工具支持,如代碼編輯器的智能感知、重構功能和錯誤檢查。

盡管 TypeScript 是 JavaScript 的超集,但它仍然可以編譯為普通的 JavaScript 代碼,并且可以在任何支持 JavaScript 的運行環境中運行。TypeScript 主要用于開發大型項目,特別是需要更強類型約束和更好工具支持的場景。

我就背:ts是js的超集,在js的基礎上提供了更多的類型和功能;ts 是一種帶有靜態類型檢查的編程語言,它可以在開發過程中檢測出類型錯誤。而 js是一種動態類型語言,它在運行時才進行類型檢查;ts是編譯性語言,需要編譯成js才能在瀏覽器或其他 JavaScript 運行時環境中執行。而js是解釋性語言不需要編譯可直接在瀏覽器或者其他JavaScript 運行時環境中執行。

typescript數據類型?

基本類型

number: 表示數值,包括整數和浮點數。

string:?表示字符串。

boolean:?表示布爾值,即 true 或 false。

null?和?undefined:?分別表示 null 和 undefined。

symbol:?表示唯一的、不可變的值。

數組類型:

type[]?或?Array<type>: 表示由指定類型元素組成的數組。

元組類型:

[type1, type2, ...]: 表示固定長度和特定順序的數組,每個位置上的元素可以具有不同的類型。

對象類型:

object: 表示非原始類型的值,例如對象、函數和數組等。

{}?或?Record<string, type>: 表示具有指定屬性和對應類型的對象。

函數類型:

(arg1: type1, arg2: type2, ...) => returnType: 表示函數類型,包括參數的類型和返回值的類型。

類型推斷:

如果沒有顯式指定變量的類型,TypeScript 可以根據賦予給變量的值來推斷其類型。

高級類型:

union: 表示多個類型中的一個值。例如,type1 | type2?表示可以是?type1?或?type2。

intersection: 表示多個類型的交集。例如,type1 & type2?表示必須同時滿足?type1?和?type2。

type: 用于創建自定義類型別名。

enum: 表示一組命名的常量值。

typescript中枚舉類型?應用場景?

枚舉類型(Enum)用于定義一組命名的常量值。枚舉類型可以為每個常量分配一個名稱,并使代碼更具可讀性和可維護性。

enum Color {

??Red,

??Green,

??Blue,

}

let myColor: Color = Color.Green;

console.log(myColor); // 輸出 1

在上面的示例中,我們定義了一個名為 Color 的枚舉類型,它包含三個常量值:Red、Green 和 Blue。這些常量默認從 0 開始自動編號。

應用場景:

表示一組相關的常量值:例如表示不同顏色、星期幾、狀態等。

限制變量取值范圍:通過指定枚舉類型,可以確保變量只能取枚舉中定義的值,防止無效值的引入。

增加代碼可讀性:使用枚舉類型可以使代碼更清晰地表達意思,提供更好的代碼可讀性和可維護性。

替代魔法數值:將代碼中的魔法數值(magic numbers)替換為有意義的枚舉常量,增加代碼的可維護性。

枚舉類型在處理一組固定的常量值時非常有用,它們提供了一種更好的方式來組織和使用常量。通過使用枚舉類型,可以減少錯誤、提高代碼可讀性,并使代碼更具表現力。

typescript中接口的理解?應用場景?

在 TypeScript 中,接口(Interface)用于描述對象的結構和行為,定義了對象應該具有哪些屬性和方法。通過接口,可以明確指定對象的形狀,并在開發過程中進行類型檢查,確保對象符合接口的要求。以下是接口的示例:

interface Person {

??name: string;

??age: number;

??sayHello(): void;

}

let person: Person = {

??name: "Alice",

??age: 30,

??sayHello() {

????console.log("Hello, I'm " + this.name);

??},

};

person.sayHello(); // 輸出 "Hello, I'm Alice"

在上面的示例中,我們定義了一個名為 Person 的接口,它要求對象具有 name 和 age 屬性,并且必須有一個名為 sayHello 的方法,沒有返回值。

應用場景:

定義對象的形狀:接口可用于定義對象的屬性和方法,確保對象的結構符合預期。

類型檢查和提示:通過使用接口,在編碼階段就能捕獲潛在的類型錯誤,并提供代碼編輯器的智能感知和自動補全功能。

對象解構和函數參數:可以使用接口來約束對象解構和函數參數,以增加代碼的可讀性和可靠性。

定義類的實現規范:接口也可以作為類的合同,規定類必須實現指定的屬性和方法,促使類的一致性和可擴展性。

接口在 TypeScript 中是一個重要的概念,它提供了一種強大的方式來描述對象的結構和行為,并且能夠幫助開發者更好地理解和使用代碼。通過使用接口,可以編寫更健壯、可讀性更高的代碼,并在團隊合作中提供清晰的約定和規范。

typescript中的interface和type有什么區別?

1.type不能繼承,interface能繼承;

interface?可以通過關鍵字?extends?進行繼承其他?interface,從而擴展和組合類型。

interface Animal {
? name: string;
}

interface Dog extends Animal {
? bark(): void;
}

上述代碼中,Dog 接口繼承了 Animal 接口,從而擁有了 name 屬性,并在其基礎上增加了一個 bark 方法。

與此不同,type 不支持直接的繼承,無法擴展其他類型。但是可以使用聯合類型(|)和交叉類型(&)進行類型組合:

type Animal = {
? name: string;
};

type Dog = Animal & {
? bark(): void;
};

?

2.type可創建類型別名;

type?可以用來創建類型別名(Type Alias),給一個類型取一個新的名稱。這樣可以提高代碼的可讀性和可維護性。例如:

type Person = {
? name: string;
? age: number;
};

Person 是一個類型別名,表示一個具有 nameage 屬性的對象類型。

3.type可以聲明任何類型,interface只能聲明對象;

type?可以聲明任何類型,包括原始類型、聯合類型、交叉類型、函數類型等。例如:

type MyNumber = number | string;

type MyObject = {
? id: number;
? name: string;
};

type MyFunction = (x: number, y: number) => number;
相比之下,interface 主要用于聲明對象類型。它只能描述對象的形狀、屬性和方法,不能直接聲明其他類型。

4.同名type只能有一個,同名interface可以多個

如果存在多個同名的?interface,它們會自動合并成一個大的接口,從而擴展了原有的接口。例如:

interface Animal {
? name: string;
}

interface Animal {
? age: number;
}

const dog: Animal = {
? name: 'Dog',
? age: 5,
};

在這個例子中,兩個 Animal 接口合并為一個,擁有 nameage 兩個屬性的接口。

相反,如果使用同名的 type 別名,后面的別名會覆蓋前面的定義,無法進行合并。

總體來說,typeinterface 在某些方面有不同的特性和用途。根據具體的需求和場景,選擇合適的方式來聲明和組織類型定義。

typescript中泛型的理解?應用場景?

在 TypeScript 中,泛型(Generics)是一種在編程語言中用于創建可重用代碼的工具。通過泛型,可以在定義函數、類或接口時使用類型參數,使其可以適用于多種不同類型的數據。

以下是一個簡單的泛型函數示例:

function identity<T>(arg: T): T {

??return arg;

}

let result = identity<string>("Hello");

console.log(result); // 輸出 "Hello"

在上面的示例中,我們定義了一個名為 identity 的泛型函數。使用 <T> 表示類型參數,并將其應用于函數參數和返回值的類型。這樣,我們可以通過傳入不同類型的參數來調用該函數,并且函數會返回相同類型的結果。

應用場景:

提高代碼的復用性:通過使用泛型,可以編寫更通用的函數、類或接口,以處理多種類型的數據,提高代碼的復用性。

類型安全性:泛型能夠提供類型檢查和約束,避免意外的類型錯誤,并在編碼階段捕獲潛在問題。

抽象數據結構:泛型在實現抽象數據結構(如棧、隊列等)時非常有用,可以處理各種元素類型而無需重復編寫代碼。

函數式編程風格:泛型常用于函數式編程風格中,例如在數組的 map、filter 等函數中,可以使用泛型來處理不同類型的數據。

通過合理應用泛型,可以提高代碼的靈活性、可讀性和可維護性。它是 TypeScript 中強大且重要的特性之一,使得我們能夠編寫更加通用和類型安全的代碼。

面試的時候我就背這句:泛型是指在定義函數、接口,類的時候沒有提前指定具體的類型,而是在使用的時候再指定類型的一種特性。

如何在react項目中應用typescript?

要在 React 項目中應用 TypeScript,可以按照以下步驟進行設置:

1.創建 TypeScript React 項目:使用腳手架工具(如 Create React App)創建一個新的 TypeScript 項目。

npx create-react-app my-app --template typescript

2.將現有 React 項目轉換為 TypeScript:如果已經有一個現有的 React 項目,并希望將其轉換為 TypeScript,可以執行以下操作:

在項目根目錄運行以下命令安裝 TypeScript 和相關的類型定義文件:

npm install typescript @types/react @types/react-dom

3.配置 TypeScript 編譯選項:可以創建 tsconfig.json 文件來配置 TypeScript 編譯選項。可以使用默認配置,也可以根據項目需求進行自定義配置。

4.安裝和使用 TypeScript 類型定義庫:如果使用了第三方庫或組件,可以通過安裝相應的類型定義文件(通常以 @types/ 開頭)來提供類型支持。

開始編寫 TypeScript 代碼:在 React 組件中使用 TypeScript 的優勢之一是能夠為組件的 props、state 和事件處理函數等添加明確的類型注解,以提供更好的類型檢查和智能感知。

5.運行項目:使用適合的命令(如 npm start)來啟動 TypeScript React 項目,并在開發過程中享受 TypeScript 的類型檢查和錯誤提示。

通過將 TypeScript 引入到 React 項目中,能夠增加代碼的可靠性、可讀性和可維護性。TypeScript 為 React 開發提供了更強大的類型系統和工具支持,以幫助開發者編寫更健壯和可擴展的應用程序。

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

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

相關文章

輕薄的ESL電子標簽有哪些特性?

在智慧物聯逐漸走進千萬家的當下&#xff0c;技術變革更加日新月異。ESL電子標簽作為科技物聯的重要組成部分&#xff0c;是推動千行百業數字化轉型的重要技術&#xff0c;促進物聯網產業的蓬勃發展。在智慧零售、智慧辦公、智慧倉儲等領域&#xff0c;ESL電子標簽在未來是不可…

win11右下角圖標(網絡,音量,電量)點擊無反應問題,兩分鐘解決!

win11系統用的好好的&#xff0c;突然有一天任務欄右下角的常用三件套&#xff08;網絡&#xff0c;音量&#xff0c;電量&#xff09;左鍵單擊沒反應&#xff0c;無法方便的調節音量和連接wifi&#xff0c;如下圖所示&#xff0c;但是右鍵好用&#xff0c;不過不方便。網上查了…

嵌入式 C 語言程序數據基本存儲結構

一、5大內存分區 內存分成5個區&#xff0c;它們分別是堆、棧、自由存儲區、全局/靜態存儲區和常量存儲區。 1、棧區(stack)&#xff1a;FIFO就是那些由編譯器在需要的時候分配&#xff0c;在不需要的時候自動清除的變量的存儲區。里面的變量通常是局部變量、函數參數等。 ?…

【Windows API】獲取卷標、卷名

1、卷->卷標 使用FindFirstVolume()和FindNextVolume()函數體系&#xff0c;枚舉系統所有卷&#xff08;Volume&#xff09;的例子&#xff0c;然后獲取卷標、卷類型。這個方式可以枚舉出沒有驅動器號&#xff08;卷標&#xff09;的卷。 int TestMode1() {HANDLE hVolume…

Failed to connect to bitbucket.org port 443

瀏覽器可以訪問bitbucket&#xff0c;但是在終端或者sourcetree上死活無法進行pull, push等操作。 Root Cause&#xff1a;“【翻】【墻】軟件”使用了http proxy&#xff0c;所以也得為git設置相同的http proxy。 所以&#xff0c;解決方法是&#xff1a; 1&#xff0c;查看“…

網絡系統架構演變

1.系統架構演變 隨著互聯網的發展&#xff0c;網站應用的規模不斷擴大。需求的激增&#xff0c;帶來的是技術上的壓力。系統架構也因此不斷的演進、升級、迭代。從單一應用&#xff0c;到垂直拆分&#xff0c;到分布式服務&#xff0c;到SOA&#xff0c;以及現在火熱的微服務架…

【Django】無法從“django.utils.encoding”導入名稱“force_text”

整晚處理 Django 的導入錯誤。 我將把它作為提醒&#xff0c;希望處于相同情況的人數會減少。 原因 某些軟件包版本不支持Django 4 請看下表并決定Django和Python的版本 方案 如果出現難以響應&#xff0c;或者更改環境麻煩&#xff0c;請嘗試以下操作 例如出現以下錯誤 …

云計算的發展前景怎么樣

云計算是當前科技領域中最受關注的領域之一,它的出現改變了傳統的計算模式,使得企業和個人能夠更加便捷地訪問和使用計算資源。隨著云計算技術的不斷發展,它的前景也變得更加光明。 以下是云計算的發展前景: 云計算的市場份額將繼續增長:根據市場研究機構的報告,云計算的市場份…

vfuhyuuy

Sublime Text is an awesome text editor. If you’ve never heard of it, you shouldcheck it out right now. I’ve made this tutorial because there’s no installer for the Linux versions of Sublime Text. While that’s not a real problem, I feel there is a clean…

通過版本號控制強制刷新瀏覽器或清空瀏覽器緩存

背景介紹 在我們做 web 項目時&#xff0c;經常會遇到一個問題就是&#xff0c;需要 通知業務人員&#xff08;系統用戶&#xff09;刷新瀏覽器或者清空瀏覽器 cookie 緩存的情況。 而對于用戶而言&#xff0c;很多人一方面不懂如何操作&#xff0c;另一方面由于執行力問題&am…

Android descendantFocusability 屬性

view 焦點問題處理 作用 通過該屬性可以指定viewGroup和其子View到底誰獲取焦點&#xff0c; 直接在viewGroup上使用就行。 屬性值 屬性值含義beforeDescendantsviewgroup會優先其子類控件而獲取到焦點afterDescendantsviewgroup只有當其子類控件不需要獲取焦點時才獲取焦點…

MFC創建和使用OCX控件

文章目錄 MFC建立OCX控件注冊OCX控件與反注冊使用Internet Explorer測試ocx控件OCX控件添加方法OCX控件添加事件Web使用OCX控件MFC使用OCX控件使用OCX控件調用ocx的功能函數對ocx的事件響應OCX控件調試工具tstcon32.exe加載ocx控件使用tstcon32.exe調試ocxMFC建立OCX控件 新建…

【ChatGPT 指令大全】怎么使用ChatGPT來輔助知識學習

目錄 概念解說 簡易教學 深度教學 教學與測驗 解釋一個主題的背后原理 總結 在當今信息時代&#xff0c;互聯網的快速發展為我們獲取知識提供了前所未有的便利。而其中&#xff0c;人工智能技術的應用也為我們的學習和交流帶來了新的可能性。作為一種基于自然語言處理的人…

ORA-01704: string literal too long

這是在做數據遷移的時候&#xff0c;將mysql庫中的數據整理成Oracle腳本&#xff0c;接著在客戶端運行sql腳本插入數據時碰到的問題。明顯就是文本太長了導致的報錯&#xff0c;但是實際上設置的字段是可以支持這么長的文本數據的。 解決方案 直接寫程序導出導入數據&#xff0…

Postgresql 基礎使用語法

1.數據類型 1.數字類型 類型 長度 說明 范圍 與其他db比較 Smallint 2字節 小范圍整數類型 32768到32767 integer 4字節 整數類型 2147483648到2147483647 bigint 8字節 大范圍整數類型 -9233203685477808到9223203685477807 decimal 可變 用戶指定 精度小…

rust學習-tokio::time

示例 use std::time::Duration; use tokio::{task, time::interval};#[tokio::main] async fn main() {let mut interval interval(Duration::from_secs(1));let handle task::spawn(async move {loop {interval.tick().await;println!("tick");}});handle.await.…

【大數據】一些基本概念

一、數據庫、數據倉庫、數據湖 1.什么是數據庫 (Database, DB) 數據庫是指長期儲存在計算機中的有組織的, 可共享的數據集合 就是存儲數據的倉庫 數據庫有三個特點: 永久存儲, 有組織, 可共享 數據庫是一種結構化數據存儲技術&#xff0c;用于存儲和管理有組織的數據。數據庫…

微信小程序云開發快速入門(2/4)

前言 我們對《微信小程序云開發快速入門&#xff08;1/4&#xff09;》的知識進行回顧一下。在上章節我們知道了云開發的優勢以及能力&#xff0c;并且我們還完成了碼仔備忘錄的本地版到網絡版的改造&#xff0c;主要學習了云數據庫同時還通過在小程序使用云API直接操作了云數…

SciencePub學術| 智能計量類重點SCIE征稿中

SciencePub學術 刊源推薦: 智能計量類重點SCIE征稿中&#xff01;信息如下&#xff0c;錄滿為止&#xff1a; 一、期刊概況&#xff1a; 智能計量類重點SCIE 【期刊簡介】IF&#xff1a;2.0-2.5&#xff0c;JCR3區&#xff0c;中科院4區&#xff1b; 【版面類型】正刊&#…

new BigDecimal(double val)注意事項 / JWT解析BigDecimal類型數據

前言&#xff1a; 公司項目中有一個板塊需要解析JWT令牌獲取載荷里面封裝的數據&#xff0c;遇到要解析一個BigDecimal類型的數據 問題發現過程&#xff1a; 正常來說&#xff0c;我們解析一個JWT令牌的步驟如下&#xff1a; public static Claims getDataFromToken(String tok…