TypeScript 中 const 与 readonly 的区别?
TypeScript 中不可变量的实现方法有两种:
TypeScript 中的只读修饰符,可以声明更加严谨的可读属性
通常在 interface 、 Class 、 type 以及 array 和 tuple 类型中使用它,也可以用来定义一个函数的参数
- //type
- typeFoo={
- readonlybar:number;
- };
- //const确保'config'不能够被改变了
- constfoo:Foo={bar:123};
- //不能被改变
- foo.bar=456;//Error:foo.bar为仅读属性
区别
- const 用于变量, readonly 用于属性
- const 在运行时检查, readonly 在编译时检查
- const 声明的变量不得改变值,这意味着,const 一旦声明变量,就必须立即初始化,不能留到以后赋值; readonly 修饰的属性能确保自身不能修改属性,但是当你把这个属性交给其它并没有这种保证的使用者(允许出于类型兼容性的原因),他们能改变
- constfoo:{
- readonlybar:number;
- }={
- bar:123
- };
- functioniMutateFoo(foo:{bar:number}){
- foo.bar=456;
- }
- iMutateFoo(foo);
- console.log(foo.bar);//456
此时,需要 iMutateFoo 明确的表示,他们的参数不可修改,那么编译器会发出错误警告:
- functioniTakeFoo(foo:Foo){
- foo.bar=456;//Error:bar属性只读
- }
- const 保证的不是变量的值不得改动,而是变量指向的那个内存地址不得改动,例如使用 const 变量保存的数组,可以使用 push , pop 等方法。但是如果使用 ReadonlyArray 声明的数组不能使用 push , pop 等方法。
枚举和常量枚举的区别?
枚举和常量枚举(const枚举)
使用枚举可以清晰地表达意图或创建一组有区别的用例
- //枚举
- enumColor{
- Red,
- Green,
- Blue
- }
- //常量枚举
- constenumColor{
- Red,
- Green,
- Blue
- }
区别
- //枚举
- enumColor{
- Red,
- Green,
- Blue
- }
- varsisterAn=Color.Red
- //会被编译成JavaScript中的varsisterAn=Color.Red
- //即在运行执行时,它将会查找变量Color和Color.Red
- //常量枚举
- constenumColor{
- Red,
- Green,
- Blue
- }
- varsisterAn=Color.Red
- //会被编译成JavaScript中的varsisterAn=0
- //在运行时已经没有Color变量
来源:https://github.com/Advanced-Frontend/Daily-Interview-Question
原文地址:https://mp.weixin.qq.com/s/HXufpHESqNWQyy2ZMmyq3A


