一 我要漲知識 —— TypeScript 常見面試題( 二 )


TS對JS的改進主要是靜態類型檢查,靜態類型檢查有何意義?標準答案是“靜態類型更有利于構建大型應用” 。
推薦使用TypeScript的原因有:

  • TypeScript簡化了JavaScript代碼,使其更易于閱讀和調試 。
  • TypeScript是開源的 。
  • TypeScript為JavaScript ide和實踐(如靜態檢查)提供了高效的開發工具 。
  • TypeScript使代碼更易于閱讀和理解 。
  • 使用TypeScript,我們可以大大改進普通的JavaScript 。
  • TypeScript為我們提供了ES6(ECMAScript 6)的所有優點 , 以及更高的生產率 。
  • TypeScript通過對代碼進行類型檢查,可以幫助我們避免在編寫JavaScript時經常遇到的令人痛苦的錯誤 。
  • 強大的類型系統,包括泛型 。
  • TypeScript只不過是帶有一些附加功能的JavaScript 。
  • TypeScript代碼可以按照ES5和ES6標準編譯 , 以支持最新的瀏覽器 。
  • 與ECMAScript對齊以實現兼容性 。
  • 以JavaScript開始和結束 。
  • 支持靜態類型 。
  • TypeScript將節省開發人員的時間 。
  • TypeScript是ES3、ES5和ES6的超集 。
4、TypeScript 的內置數據類型有哪些?數字類型:用于表示數字類型的值 。TypeScript 中的所有數字都存儲為浮點值 。
let identifier: number = value;布爾類型:一個邏輯二進制開關 , 包含true或false
let identifier: string = " ";Null 類型: Null 表示值未定義的變量 。
let identifier: bool = Boolean value;未定義類型:一個未定義的字面量,它是所有變量的起點 。
let num: number = null;void 類型:分配給沒有返回值的方法的類型 。
let unusable: void = undefined;5、TypeScript 中的變量以及如何聲明?變量是內存中用于存儲值的命名空間 。
在 TypeScript 中聲明變量的類型語法在變量名稱后包括一個冒號(:),后跟其類型 。與 JavaScript 相似,我們使用var關鍵字聲明變量 。
在Typescript中聲明變量時,必須遵循某些規則:
  • 變量名稱必須是字母或數字 。
  • 不能以數字開頭名稱 。
  • 除下劃線( _ )和美元( $ )符號外,它不能包含空格和特殊字符 。
6、TypeScript 中的泛型是什么?TypeScript Generics 是提供創建可重用組件的方法的工具 。它能夠創建可以使用多種數據類型而不是單一數據類型的組件 。而且,它在不影響性能或生產率的情況下提供了類型安全性 。泛型允許我們創建泛型類,泛型函數,泛型方法和泛型接口 。
在泛型中 , 類型參數寫在左括號(<)和右括號(>)之間,這使它成為強類型集合 。它使用一種特殊的類型變量來表示類型 。
function identity < T > (arg: T) : T {return arg;}let output1 = identity < string > ("edureka");let output2 = identity < number > (117);console.log(output1);console.log(output2);7、TypeScript 中 interface 和 type 的差別是什么?7.1、相同點
  • 都可以描述一個對象或者函數
interface User {name: string age: number}interface SetUser { (name: string, age: number) : void;}type User = {name: string age: number};type SetUser = (name: string, age: number) = >void;
  • 都允許拓展(extends)
interface 和 type 都可以拓展 , 并且兩者并不是相互獨立的,也就是說 interface 可以 extends type, type 也可以 extends interface。雖然效果差不多,但是兩者語法不同 。
// 1、interface extends interfaceinterface Name {name: string;}interface User extends Name {age: number;}// 2、type extends typetype Name = {name: string;}type User = Name & { age: number};// 3、interface extends typetype Name = {name: string;}interface User extends Name {age: number;}// 4、type extends interfaceinterface Name {name: string;}type User = Name & {age: number;}7.2、不同點
  • type 可以而 interface 不行
type 可以聲明基本類型別名,聯合類型,元組等類型
// 基本類型別名type Name = string// 聯合類型interface Dog {wong();}interface Cat {miao();}type Pet = Dog | Cat// 具體定義數組每個位置的類型type PetList = [Dog, Pet]type 語句中還可以使用 typeof 獲取實例的 類型進行賦值
// 當你想獲取一個變量的類型時,使用 typeoflet div = document.createElement('div');type B = typeof div其他騷操作
type StringOrNumber = string | number;type Text = string | { text: string };type NameLookup = Dictionary<string, Person>;type Callback<T> = (data: T) => void;type Pair<T> = [T, T];type Coordinates = Pair<number>;type Tree<T> = T | { left: Tree<T>, right: Tree<T> };