成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

TypeScript 中 Const 和 Readonly 的區別?枚舉和常量枚舉的區別?

開發 前端
ypeScript 中的只讀修飾符,可以聲明更加嚴謹的可讀屬性,通常在 interface 、 Class 、 type 以及 array 和 tuple 類型中使用它,也可以用來定義一個函數的參數。

[[415240]]

本文轉載自微信公眾號「三分鐘學前端」,作者sisterAn 。轉載本文請聯系三分鐘學前端公眾號。

TypeScript 中 const 與 readonly 的區別?

TypeScript 中不可變量的實現方法有兩種:

  • 使用 ES6 的 const 關鍵字聲明的值類型
  • 被 readonly 修飾的屬性

TypeScript 中 readonly

TypeScript 中的只讀修飾符,可以聲明更加嚴謹的可讀屬性

通常在 interface 、 Class 、 type 以及 array 和 tuple 類型中使用它,也可以用來定義一個函數的參數

  1. // type 
  2. type Foo = { 
  3.   readonly bar: number; 
  4. }; 
  5. // const 確保 'config' 不能夠被改變了 
  6. const foo: Foo = { bar: 123 }; 
  7. // 不能被改變 
  8. foo.bar = 456; // Error: foo.bar 為僅讀屬性 
  1. // 函數 
  2. function foo(config: { readonly num: number }) { 
  3.   // .. 
  4. const config = { num: 123 } 
  5. foo(config) 

區別

  • const 用于變量, readonly 用于屬性
  • const 在運行時檢查, readonly 在編譯時檢查
  • const 聲明的變量不得改變值,這意味著,const 一旦聲明變量,就必須立即初始化,不能留到以后賦值; readonly 修飾的屬性能確保自身不能修改屬性,但是當你把這個屬性交給其它并沒有這種保證的使用者(允許出于類型兼容性的原因),他們能改變
  1. const foo: { 
  2.   readonly bar: number; 
  3. } = { 
  4.   bar: 123 
  5. }; 
  6.  
  7. function iMutateFoo(foo: { bar: number }) { 
  8.   foo.bar = 456; 
  9.  
  10. iMutateFoo(foo); 
  11. console.log(foo.bar); // 456 

此時,需要 iMutateFoo 明確的表示,他們的參數不可修改,那么編譯器會發出錯誤警告:

  1. function iTakeFoo(foo: Foo) { 
  2.   foo.bar = 456; // Error: bar 屬性只讀 
  • const 保證的不是變量的值不得改動,而是變量指向的那個內存地址不得改動,例如使用 const 變量保存的數組,可以使用 push , pop 等方法。但是如果使用 ReadonlyArray 聲明的數組不能使用 push , pop 等方法。

枚舉和常量枚舉的區別?

枚舉和常量枚舉(const枚舉)

使用枚舉可以清晰地表達意圖或創建一組有區別的用例

  1. // 枚舉 
  2. enum Color { 
  3.   Red, 
  4.   Green, 
  5.   Blue 
  6.  
  7. // 常量枚舉 
  8. const enum Color { 
  9.   Red, 
  10.   Green, 
  11.   Blue 

區別

  • 枚舉會被編譯時會編譯成一個對象,可以被當作對象使用
  • const 枚舉會在 typescript 編譯期間被刪除,const 枚舉成員在使用的地方會被內聯進來,避免額外的性能開銷
  1. // 枚舉 
  2. enum Color { 
  3.   Red, 
  4.   Green, 
  5.   Blue 
  6.  
  7. var sisterAn = Color.Red 
  8. // 會被編譯成 JavaScript 中的 var sisterAn = Color.Red 
  9. // 即在運行執行時,它將會查找變量 Color 和 Color.Red 

  1. // 常量枚舉 
  2. const enum Color { 
  3.   Red, 
  4.   Green, 
  5.   Blue 
  6.  
  7. var sisterAn = Color.Red 
  8. // 會被編譯成 JavaScript 中的 var sisterAn = 0 
  9. // 在運行時已經沒有 Color 變量 

來源:https://github.com/Advanced-Frontend/Daily-Interview-Question

 

責任編輯:武曉燕 來源: 三分鐘學前端
相關推薦

2009-08-17 18:04:49

C# 枚舉

2009-08-27 10:54:09

C# const和st

2025-03-07 08:53:33

TypeScript普通枚舉反向映射

2024-09-29 08:35:34

TypeScript枚舉安全性

2009-10-12 16:56:36

VB.NET常量VB.NET枚舉

2020-11-19 08:04:10

JS變量Const

2011-04-11 13:00:08

C++結構體枚舉

2023-12-07 11:47:00

TypeScript特殊值

2022-05-06 09:21:21

TypeScriptinterfacetype

2022-02-25 09:19:32

TypeScript輔助函數枚舉

2022-09-02 09:02:44

TypeInterface

2023-10-12 08:25:18

Javaequals內存

2025-05-09 09:25:00

2022-04-07 16:03:36

JavaScriptTypeScript

2010-11-22 12:59:30

MySQL字段

2022-01-07 08:24:13

STM32枚舉結構體

2010-08-30 10:32:38

SPANDIV

2015-08-10 10:58:53

dompropertyattribute

2010-09-01 15:11:09

linkimportCSS

2012-03-01 14:04:03

Java
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 九色 在线 | 亚洲欧美国产精品一区二区 | 亚洲精品一区久久久久久 | 亚洲毛片网站 | 精品国产色 | 亚洲激情综合网 | 久在草| 伊人久久大香线 | 色桃网 | 日本一区二区不卡 | 国产黄色精品在线观看 | 国产视频第一页 | 国产精品成人在线 | 国产一区精品 | 99热播精品 | 天堂中文资源在线 | 久久久久高清 | www午夜视频 | 久久视频一区 | 一级毛片视频免费观看 | 黄色小视频入口 | 波多野结衣先锋影音 | 国产美女一区二区 | av在线一区二区 | 久久久久成人精品免费播放动漫 | 亚洲一二三视频 | 亚洲影音先锋 | 久久久久久综合 | 国产一区二区在线播放 | 国产999精品久久久影片官网 | 91久久久久久久久 | 一区二区中文字幕 | 欧美日韩久| 91成人免费看片 | 男人天堂999| 国产九九九 | 精品一区二区三区电影 | 365夜爽爽欧美性午夜免费视频 | 日韩午夜网站 | 亚洲综合大片69999 | 久久久久久国产精品免费免费狐狸 |