首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

函数参数的Tyepscript `Final`还是`const`?

在 TypeScript 中,函数参数可以使用 finalconst 关键字来声明。这两个关键字都用于表示参数是只读的,即在函数体内不能对其进行修改。

  1. final 关键字:final 关键字用于表示参数是只读的,并且不能被子类重写。这意味着在继承关系中,子类不能重新定义该参数。使用 final 关键字可以确保参数的值在函数内部不会被修改,提高代码的可靠性和可维护性。
  2. const 关键字:const 关键字用于表示参数是只读的,但它可以被子类重写。这意味着在继承关系中,子类可以重新定义该参数。使用 const 关键字可以确保参数的值在函数内部不会被修改,但允许子类根据需要进行修改。

选择使用 final 还是 const 取决于具体的需求和设计。如果你希望参数在继承关系中不能被重写,可以使用 final 关键字。如果你希望参数在继承关系中可以被重写,可以使用 const 关键字。

以下是一些应用场景和示例:

  1. 应用场景:
    • 当你希望确保函数参数在函数内部不被修改,并且不允许子类重写时,可以使用 final 关键字。
    • 当你希望确保函数参数在函数内部不被修改,但允许子类根据需要进行修改时,可以使用 const 关键字。
  2. 示例:// 使用 final 关键字 class Parent { public method(final param: number): void { // param = 10; // 编译错误,final 参数不能被修改 console.log(param); } }

class Child extends Parent {

代码语言:txt
复制
 // public method(final param: number): void { // 编译错误,final 参数不能被重写
代码语言:txt
复制
 //   console.log(param);
代码语言:txt
复制
 // }

}

const parent = new Parent();

parent.method(5); // 输出: 5

const child = new Child();

child.method(10); // 输出: 10

// 使用 const 关键字

class Parent {

代码语言:txt
复制
 public method(const param: number): void {
代码语言:txt
复制
   // param = 10; // 编译错误,const 参数不能被修改
代码语言:txt
复制
   console.log(param);
代码语言:txt
复制
 }

}

class Child extends Parent {

代码语言:txt
复制
 public method(const param: number): void {
代码语言:txt
复制
   param = 20; // 子类可以根据需要修改 const 参数
代码语言:txt
复制
   console.log(param);
代码语言:txt
复制
 }

}

const parent = new Parent();

parent.method(5); // 输出: 5

const child = new Child();

child.method(10); // 输出: 20

代码语言:txt
复制

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云函数计算(云函数):云原生的事件驱动型无服务器计算服务,支持多种语言编写函数,实现按需计算,无需管理服务器。详情请参考:腾讯云函数计算
  • 腾讯云云数据库 MySQL:腾讯云提供的高性能、可扩展的关系型数据库服务,适用于各种规模的应用程序。详情请参考:腾讯云云数据库 MySQL
  • 腾讯云云服务器(CVM):腾讯云提供的弹性计算服务,提供安全、可靠、高性能的云服务器,支持多种操作系统和应用场景。详情请参考:腾讯云云服务器
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Dart中finalconst异同点

相同点 二者都可以用来定义一个常量,如下所示: const PI = 3.14159265; print(PI); final PI2 = 3.14; print(PI2);...final currentTime = new DateTime.now(); print(currentTime); 这段代码运行是没有任何问题,结果如下: 2019-07-01 17:58:23.197829...我们将上面代码中final改成const,如下: const currentTime = new DateTime.now(); print(currentTime); 此时程序报错了:...const是编译时常量,const修饰常量值在编译时候需要确定。 final是运行时常量,它是惰性初始化,即在运行时第一次使用前才会进行初始化。...因此,如果常量值在编译时候就已经确定,运行时也不会改变,那么使用constfinal均可;如果常量值在运行时候才会确定(比如调用一个方法来给常量赋值),那么就必须使用final,不可以使用const

51340

Dart 中finalconst使用详解 原

1.基本使用 如果变量值不发生变化,那么可以使用 finalconst 修饰, ----final:只能被设一次值,在声明处赋值,值和普通变量设值一样,可以是对象、字符串、数字等,用于修饰值表达式不变变量...; final name = 'Bob'; // name = 'job'; //运行出错,因为final修饰变量不能调用其setter方法,即:不能设值 ----const:只能被设一次值,在声明处赋值...,即:非const修饰变量(只有const修饰变量才是编译时常量) ----const还可以用来声明常量值: // [] 创建一个空列表. // const [] 创建一个空不可变列表 (EIA).... var foo = const []; // foo 目前是一个 EIA. final bar = const []; // bar 永远是一个 EIA. const baz = const [...//你可以改变 非final, 非const 修饰变量, // 即使它值为编译时常量值. foo = []; // 不能改变finalconst修饰变量值. // bar = []; //

1.1K10

Python函数参数传递:传值还是传引用

按照C++语言思维,如果Python函数参数传递是传值的话,结果应该是[0, 1],如果是传引用的话,结果应该是[‘T’, ‘Z’, ‘Y’]。 可是实际结果是:[0, 1, 100]。...所以,Python函数参数传递既不是所谓传值也不是传引用。 Python函数参数传递 那么Python中函数参数到底是以什么形式传递呢?...明白了这个概念,那么我们可以说Python中函数参数传递是传递变量值,即就是变量所指向对象地址。 一般,我们有下面的规律: 1....不可变对象作为函数参数,相当于C系语言值传递。 2. 可变对象作为函数参数,相当于C系语言引用传递。...所以最重要一点是明白:Python中函数参数传递是变量指向对象地址;Python中变量和对象不同。

3.1K51

go语言中函数参数传值还是传引用思考

C++函数参数传值和传引用 熟悉C++程序员们应该都清楚,C++里传递函数参数时候,传值还是传引用是函数声明时候决定。...,在传递结构体或复合类型做入参时,为了避免拷贝开销,传常引用声明方式更是司空见惯: void PassStructByRef(const std::string& str) 这种传递大结构体时用引用习惯...go函数参数一律传值 预声明类型如int,string等,以及普通命名结构类型没什么好说,无论是传递该类型还是指针作为函数参数,本质上都是传值,这点和C++一样。...这里主要讨论slice,map和chan三种复合类型在作为函数参数情况。...C++函数参数通过常引用和引用来区分入参和出参,对读代码的人来说一目了然;go里函数参数不存在const修饰符,取而代之提供了多返回值特性,故完全可以把入参放到普通参数位置,而把出参全部作为返回值

4.6K40

函数参数

函数定义(一): 函数就是完成特定功能一个语句组,这组语句可以作为一个单位使用,并且给它取一个名字。 可以通过函数名在程序不同地方多次执行(这通常叫函数调用)。...代码重用 避免重复劳作,提供效率 函数定义和调用 def 函数名([参数列表]): ______定义 函数名([参数列表]) ______调用 函数名可以使用 数字+字母+下划线组成; 如果函数名有两个单词组成...例子1: 判断从键盘输入是数字还是非数字: def fun(): sth = raw_input("pls input a number :") try: if type...---- 函数定义(二) 形式参数和实际参数 在定义函数时,函数名后面括号中变量名称叫做“形式参数”,或者称为“形参” 在调用函数时,函数名后面括号中变量名称叫做“实际参数”,或者称为“实参” 综合演练...函数默认参数: In [88]: def aa(x, y): ##定义两个形参 ...: print x + y ...: In [89]: aa(3,6

1.6K70

函数参数

函数是绝大多数编程语言中都支持一个代码“构建块”,但是Python中函数与其他语言中函数还是有很多不太相同地方,其中一个显著区别就是Python对函数参数处理。...在Python中,函数参数可以有默认值,也支持使用可变参数,所以Python并不需要像其他语言一样支持函数重载,因为我们在定义一个函数时候可以让它有多种不同使用方式,下面是两个小例子。...print(add(c=50, a=100, b=200)) 我们给上面两个函数参数都设定了默认值,这也就意味着如果在调用函数时候如果没有传入对应参数值时将使用该参数默认值,所以在上面的代码中我们可以用各种不同方式去调用...其实上面的add函数还有更好实现方案,因为我们可能会对0个或多个参数进行加法运算,而具体有多少个参数是由调用者来决定,我们作为函数设计者对这一点是一无所知,因此在不确定参数个数时候,我们可以使用可变参数...# 在参数前使用*表示args是可变参数 # 也就是说调用add函数时传入参数个数可以是0个或多个 def add(*args): total = 0 for val in args: total

1.4K40

expr_const函数前与函数区别

const int sz = get_size(); staff_size初始值虽然是个字面值常量,但它数据类型只是普通int而非const int,还是可以被重新赋值,所以不是常量表达式。...constexpr把它所定义对象置为了顶层const。...int *p = &i; //p是常量指针,指向整型常量i constexpr int *p1 = &j; //p1是常量指针,指向整数j 六、字面值常量类 constexpr函数参数和返回值必须是字面值类型...注意,函数返回值必须是字面值类型,但可以不是一个常量。 和其他类不同,字面值类型类可能含有constexpr函数成员。这样成员必须符合constexpr函数所有要求,它们是隐式const。...类必须使用析构函数默认定义,该成员负责销毁类对象。 尽管构造函数不能是const,但是字面值常量类构造函数可以是constexpr函数

73730

Python学习笔记之函数参数传递 传值还是传引用

在学完Python函数那一章节时,很自然就会想到Python中函数传参时传值呢?还是传引用?或者都不是? ...现在我们再来看看开始那两段代码: def foo(var): var = 2 print(var) a = 1 foo(a) print(a) 上面这段代码把a作为参数传递给函数...然后在函数中var = 2时,因为int对象不可改变,于是创建一个新int对象(值为2)并且令var指向它。而a仍然指向原来值为1int对象,所以函数没有改变变量a。 如下图: ?...因为list对象是可以改变函数中使用append在其末尾添加了一个元素,list对象内容发生了改变,但是b和var仍然是指向这一个list对象,所以变量b内容也发生了改变。 如下图: ?...那么Python中参数传递是传值,还是传引用呢?准确回答:都不是。之所以不是传值,因为没有产生复制,而且函数拥有与调用者同样对象。而似乎更像是C++传引用,但是有时却不能改变实参值。

1.8K30

可变参数函数

什么是可变参数函数 C语言允许定义参数数量可变函数,这称为可变参数函数(variadic function)。这种函数需要固定数量强制参数,后面是数量可变可选参数。...其中,强制参数必须至少一个,可选参数数量可变,类型可变,可选参数数量由强制参数值决定。 C 语言中最常用可变参数函数例子是 printf()和 scanf()。...这两个函数都有一个强制参数,即格式化字符串。格式化字符串中转换修饰符决定了可选参数数量和类型。 可变参数函数格式:int fun(int a,...)...可变参数获取 我先粘贴一下微软给我们办法: 当编写可变参数函数时,必须用 va_list 类型定义参数指针,以获取可选参数。...现在引入两个函数实现上面的想法: void va_start(va_list argptr, lastparam); 该函数第一个参数是一个va_list 类型指针,第二个参数是可变参数函数中最后一个强制参数

18710

Python函数参数

本章将介绍函数参数用法 定义函数时候,我们把参数名字和位置确定下来,函数接口定义就完成了。...对于函数调用者来说,只需要知道传递正确参数,以及函数就返回什么样值就够了,函数内部复杂逻辑被封装起来了,调用者无须了解。 Python函数定义非常简单,但灵活度却非常大。...除了正常定义必须参数外,还可以使用默认参数、可变参数和关键词参数,使得函数定义出来接口,不但能处理复杂函数,还可以简化调用者代码。...变化小参数就可以作为默认参数。 使用默认参数有什么好处呢?最大好处是能降低调用函数难度。...无论是简单调用还是复杂调用,函数只需要定义一个。

1.1K20

函数参数-Python

定义函数时候,我们把参数名字和位置确定下来,函数接口定义就完成了。...对于函数调用者来说,只需要知道如何传递正确参数,以及函数将返回什么样值就够了,函数内部复杂逻辑被封装起来,调用者无需了解。 Python函数定义非常简单,但灵活度却非常大。...除了正常定义必选参数外,还可以使用默认参数、可变参数和关键字参数,使得函数定义出来接口,不但能处理复杂参数,还可以简化调用者代码。...从上面的例子可以看出,默认参数可以简化函数调用。...当函数有多个参数时,把变化大参数放前面,变化小参数放后面。变化小参数就可以作为默认参数。 使用默认参数有什么好处?最大好处是能降低调用函数难度。

81140

Python函数参数

在调用函数时,该函数形参才会被分配内存,并赋值;函数调用结束,分配内存空间也随即释放~ - 实参 即在调用函数时,向该函数形参传递确定值(必须是确定值)。...传递值可以是常量、变量、表达式、函数等形式~ 在形参和实参中又可以细化为多种参数,例如形参中有 位置形参,默认形参,可变长参数......使用注意点: 1)在调用函数时,位置实参 必须在 关键字实参前面~ def func(x, y, z): print(x, y, z) # 位置参数和关键字参数混合使用时候 func(1,...x=20 func('hello') Tip:func函数在定义时,age 只被赋值一次,即 age=10,下面重新指定了 x=20,不会再作用于函数 age 参数 可变长参数 在定义函数时,若不确定调用时需要传入多少个参数...前面提过 默认形参必须放在位置形参后面,如下示例函数定义中,name 和 age 都是命名关键字参数(不是默认形参,也不是位置形参),name 是命名关键字参数默认值,所以如下示例中函数定义方式并没有问题

1.1K20

python函数参数

sum=sum + n * n     return sum 定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*号,在函数内部,参数numbers接受到是一个tuple,因此函数代码完全不变...,但是调用函数时,可传入任意个参数,包括0个参数 calc(1,2)=5 calc()=0 如果要传入参数是一个list或tuple,调用写法 nums=[1,2,3] calc(nums[0],nums...tuple.而关键字参数允许你传入0个或任意个包含参数参数,这些关键字参数函数内部自动组装为一个dict,请看示例 def   person(name,age,**kw)     print('name...、 对于关键参数函数调用者可以传入任意不受限制关键字参数,至于传入哪些,就需要在函数内部通过kw检查 仍以person()函数讲解,我们检查是否有city和job (age**kw):     kw...最神奇是通过tuple和dict,也可以调用上述函数 ? 所以,对于任意参数,都可以通过类func(*args,**kw)形式调用它,无论它参数是如何定义

86210

const成员函数一定是线程安全吗?

,它还可以在你打算更改基类中函数签名时,衡量一下波及影响面 //final关键字:应用于虚函数,会阻止它在派生类中被改写,final也可以被应用于一个类,在这种情况下,该类会被禁止用作基类 //...和成员函数是否带有 const声明是一样。...//宗旨:多个线程同时调用带有 const 得成员函数,如何保证线程安全性 //const成员函数就一定是线程安全吗?...,一个返回赋值返回参数 */ //1, 拷贝构造函数 class XML{ public: //默认构造函数: 不带任何参数,在没有定义其他构造函数情况下,编译器会自动生成默认构造函数.../** 注意两点: 1, 类中存在指针,会出现深拷贝和浅拷贝问题,此时必须自定义拷贝构造函数实现深拷贝 2, 拷贝构造函数第一个参数必须是该类一个引用

1K20

规避Variable used in lambda expression should be final or effectively final而引发了方法参数值拷贝问题

编译不过去, // Variable used in lambda expression should be final or effectively final...void copyMap(Map> sourceMap, Map> targetMap) { // 方法参数是值传递...); } } 问题 一开始是编译不过去 Variable used in lambda expression should be final or effectively final 翻译过来就是说在...lambda表达式中只能引用标记了 final 外层局部变量或者虽然没有显式定义为final,但实际上就是一个final变量,否则会编译错误。...然后翎野君一下子看出了其中门道,然后给他讲了一下java中方法参数传递实际上是值传递,之前还专门写过一篇文章辨析Java方法参数值传递和引用传递。

63910

C++中const成员变量和成员函数

const成员函数(常成员函数const 成员函数可以使用类中所有成员变量,但是不能修改它们值,这种措施主要还是为了保护数据而设置const 成员函数也称为常成员函数。...需要强调是,必须在成员函数声明和定义处同时加上 const 关键字。...char *getname() const和char *getname()是两个不同函数原型,如果只在一个地方加 const 会导致声明和定义处函数原型冲突。...最后再来区分一下 const 位置: 函数开头 const 用来修饰函数返回值,表示返回值是 const 类型,也就是不能被修改,例如const char * getname()。...函数头部结尾加上 const 表示常成员函数,这种函数只能读取成员变量值,而不能修改成员变量值,例如char * getname() const

19130
领券