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

TS 进阶 - 类型基础

'; } # 联合类型 联合类型,代表一组类型可用集合,只要最终赋值类型属于联合类型一员,就可以通过类型检查。...{}) 是一个合法函数类型 可以联合类型中进一步嵌套联合类型,这些嵌套联合类型最终都会被展平到第一级 联合类型常用场景之一是通过多个对象类型联合,来实现手动互斥属性,即这一属性如果有 字段1...: false): number;,重载签名二,bar传值或传入 bar 值为 false ,返回值类型为 number; function func(foo: number, bar?...拥有多个重载声明函数在被调用时,是按照重载声明顺序往下查找。 TypeScript 中重载更像伪重载,只有一个具体实现,其重载体现在方法调用签名上而不是具体实现细节上。...any 类型万能性会导致其被经常滥用,需要注意: 如果是类型兼容报错导致要使用 any,考虑使用类型断言代替 如果是类型太复杂导致不想全部声明要使用 any, 考虑去将这里类型去断言为需要最简类型

1.7K50

编写高质量可维护代码:Awesome TypeScript

TypeScript TypeScript 是静态类型语言,通过类型注解提供编译静态类型检查代码编译阶段会进行变量类型检测,提前暴露潜在类型错误问题。...所以,需要接收所有类型场景下,优先考虑用 Unknown 代替 Any。 Tuple 元组:支持数组内存储不同数据类型元素,让我们组织数据时候更灵活。...类型注解 TypeScript 通过类型注解提供编译静态类型检查,可以在编译阶段就发现潜在 Bug,同时让编码过程中提示也更智能。使用方式很简单, : 冒号后面注明变量类型即可。...const str: string = 'abc'; 接口 面向对象编程语言里面,接口是实现程序解耦关键,它只定义具体包含哪些属性和方法,而涉及任何具体实现细节。...#name; // 访问会报错 泛型 应用场景:当我们需要考虑代码可复用性,就需要用到泛型。让组件不仅能够支持当前数据类型,同时也能支持未来数据类型

2.4K10
您找到你想要的搜索结果了吗?
是的
没有找到

了不起 TypeScript 入门教程

通过类型断言这种方式可以告诉编译器,“相信我,我知道自己干什么”。类型断言好比其他语言里类型转换,但是不进行特殊数据检查和解构。它没有运行时影响,只是在编译阶段起作用。...: number ): string { return name + id; } 声明函数,可以通过 ? 号来定义可选参数,比如 age?: number 这种形式。...要解决前面遇到问题,方法就是为同一个函数提供多个函数类型定义来进行函数重载,编译器会根据这个列表去处理函数调用。...之后,可恶错误消息又消失了,因为这时 result 变量类型是 string 类型 TypeScript 中除了可以重载普通函数之外,我们还可以重载类中成员方法。...,当 TypeScript 编译器处理函数重载,它会查找重载列表,尝试使用第一个重载定义。

6.9K52

框架设计原则和规范(二)

如果需要提供多态层次结构类型,定义接口类型(结构)不能继承其他类型,但可以实现接口 1.3.4. 考虑通过定义接口来达到多重继承类似的效果 1.4. 抽象类设计 1.4.1....但适合用来用在框架内部互相调用接口处理上。 2.1.2.2. 如果希望一个类实例只能通过接口来使用,考虑显式实现接口 2.1.2.3....可以通过显式实现接口成员来模拟变体:当此实例是接口类型,同样方法拥有不同参数或返回值类型 public class StringCollection: IList {...避免结构中显式定义默认构造函数 C#编译器没有显式某人构造函数,结构创建会更快。 2.3.9....除非类型像个基本(内置)类型,否则别用操作符重载 2.7.2. 考虑让人感觉应该像基本类型类型中定义操作符重载 比如System.Stringoperator==和 operator !

1.4K50

1.8W字|了不起 TypeScript 入门教程(第二版)

通过类型断言这种方式可以告诉编译器,“相信我,我知道自己干什么”。类型断言好比其他语言里类型转换,但是不进行特殊数据检查和解构。它没有运行时影响,只是在编译阶段起作用。...; 语句可以通过 TypeScript 类型检查检查。但在生成 ES5 代码中,! 非空断言操作符被移除了,所以浏览器中执行以上代码,控制台会输出 undefined。...: number ): string { return name + id; } 声明函数,可以通过 ? 号来定义可选参数,比如 age?: number 这种形式。... TypeScript 中除了可以重载普通函数之外,我们还可以重载类中成员方法。...,当 TypeScript 编译器处理函数重载,它会查找重载列表,尝试使用第一个重载定义。

10K51

分享 30 道 TypeScript 相关面的面试题

当创建可能缺少值结构或处理来自外部源数据(其中某些字段可能不存在),这非常有用。 08、定义对象形状,您能区分interface和type吗?...答:泛型允许创建灵活且可重用组件,而无需牺牲类型安全性。它们充当未来类型占位符,让您可以编写适用于多种类型函数、类或接口通过利用泛型,开发人员可以确保各种数据类型安全,而无需编写冗余代码。...答案:TypeScript 中 never 类型表示永远不会出现值。它通常用于返回值函数 - 例如,那些总是抛出异常或具有无限循环函数。...此模式允许 TypeScript 中实现类似多重继承行为。 24、TypeScript 中方法重载函数重载有什么区别? 答案:TypeScript 支持函数重载,即为单个函数声明多个函数类型。...然后,编译器将根据函数调用参数使用适当类型。但是,TypeScript 不支持传统方法重载(您可以定义多个具有相同名称但参数不同方法)。 相反,您可以使用可选参数或联合类型来实现类似的功能。

60030

代码质量规则

CA1012:抽象类型不应具有构造函数 抽象类型构造函数只能由派生类型调用。 由于公共构造函数用于创建类型实例,但无法为抽象类型创建实例,因此具有公共构造函数抽象类设计上是错误。...CA1040:避免使用空接口 接口定义提供某个行为或使用协定成员。 接口所描述功能可以被任何类型采用,而不管该类型出现在继承层次结构中哪个位置。 类型通过实现接口成员来实现接口。...由于调用静态成员不需要类型示例,因此没必要使用构造函数。 为安全起见,字符串重载应使用字符串自变量调用统一资源标识符 (URI) 重载。...CA1810:以内联方式初始化引用类型静态字段 当一个类型声明显式静态构造函数,实时 (JIT) 编译器会向该类型每个静态方法和实例构造函数中添加一项检查,以确保之前已调用该静态构造函数。...字段 Dispose 方法不由声明类型 Dispose 方法调用。 CA2214:不要在构造函数调用可重写方法 构造函数调用虚方法,可能尚未执行调用该方法实例构造函数

2.1K30

TypeScript进阶

例如:将一个联合类型变量指定为一个更加具体类型(但不能指定为联合类型中不存在类型): // 使用联合类型,必须使用这些类型共有的属性才行,但使用类型断言使其确定为某一种类型,就没有了此限制。...接口继承 接口继承就是说接口可以通过其他接口来扩展自己。 Typescript 允许接口继承多个接口。 继承使用关键字 extends。...// a是一个数组,...items就是剩余参数1,2,3 函数重载 函数重载允许一个函数接受不同数量或类型参数,并作出不同处理。...: boolean): number; 在这个 test 函数里,我们本意可能是当传入参数 para 是 User 传 flag,当传入 para 是 number ,传入 flag。...const res = test(user, false); declare只起提示作用,参与任何逻辑实现,如果调用declare过方法没有js实现的话会报错。

94920

Kotlin与Java互操作

同时,进行Java编程也可以调用Kotlin中API接口。 Kotlin调用Java Kotlin设计时就考虑了与Java互操作性。...空安全类型 Kotlin空安全类型原理是,Kotlin在编译过程中会增加一个函数调用,对参数类型或者返回类型进行控制,开发者可以开发通过注解@Nullable和@NotNull方式来限制Java...,那么可以通过使用将Lambda表达式转换为特定SAM类型适配器函数来选择需要调用方法。...静态字段 命名对象或伴生对象,声明 Kotlin 属性会在该命名对象或包含伴生对象类中包含静态幕后字段。通常这些字段是私有的,但可以通过以下方式之一暴露出来。...KotlinJVM虚拟机中运行时会检查所有的公共函数,可以检查非空值,这时候就可以通过NullPointerException得到Java中非空值代码。

3.4K30

Kotlin互操作——Kotlin与Java互相调用

同时,进行Java编程也可以调用Kotlin中API接口。 本文选自《Kotlin开发快速入门与实战》 Kotlin与Java互操作 1 ....Kotlin调用Java Kotlin设计时就考虑了与Java互操作性。可以从Kotlin中自然地调用现有的Java代码,Java代码中也可以很顺利地调用Kotlin代码。...② 空安全类型 Kotlin空安全类型原理是,Kotlin在编译过程中会增加一个函数调用,对参数类型或者返回类型进行控制,开发者可以开发通过注解@Nullable和@NotNull方式来弥补Java...,那么可以通过使用将Lambda表达式转换为特定SAM类型适配器函数来选择需要调用方法。...KotlinJVM虚拟机中运行时会检查所有的公共函数,可以检查非空值,这时候就可以通过NullPointerException得到Java中非空值代码。

3.7K10

Visual C++ 中重大更改

有关详细信息,请参阅 跨 DLL 边界传递 CRT 对象可能错误。      我们进一步建议,你在编写代码永远不依赖除 COM 接口或 POD 对象以外特定对象布局。...非类型模板参数 现在会在提供显式模板参数准确检查包含非类型模板参数某些代码类型符合性。 例如,早期版本 Visual C++ 中正确编译以下代码。           ...更改指针类型需要对使用联合字段代码进行更改。 将代码更改为值将更改存储联合数据,这会影响其他字段,因为联合类型字段共享相同内存。 根据值大小,它还可能更改联合大小。 ...创建此类联合时,将不再隐式调用联合匿名结构成员构造函数。 此外,联合超出范围,不再隐式调用联合匿名结构成员析构函数。... C++ 中,考虑名称解析候选对象,可能会出现作为潜在匹配项考虑一个或多个名称生成无效模板实例化情况。

5.1K10

Visual C++ 中重大更改

有关详细信息,请参阅 跨 DLL 边界传递 CRT 对象可能错误。      我们进一步建议,你在编写代码永远不依赖除 COM 接口或 POD 对象以外特定对象布局。...非类型模板参数 现在会在提供显式模板参数准确检查包含非类型模板参数某些代码类型符合性。 例如,早期版本 Visual C++ 中正确编译以下代码。           ...更改指针类型需要对使用联合字段代码进行更改。 将代码更改为值将更改存储联合数据,这会影响其他字段,因为联合类型字段共享相同内存。 根据值大小,它还可能更改联合大小。 ...创建此类联合时,将不再隐式调用联合匿名结构成员构造函数。 此外,联合超出范围,不再隐式调用联合匿名结构成员析构函数。... C++ 中,考虑名称解析候选对象,可能会出现作为潜在匹配项考虑一个或多个名称生成无效模板实例化情况。

4.7K00

C# .NET面试系列二:面向对象

什么是构造函数?构造函数(Constructor)是一种特殊类型方法,它在创建类实例(对象)调用,用于初始化对象状态。构造函数名称必须与包含它名称相同,并且没有返回类型。...然而,派生类可以调用基类构造函数,并可以派生类构造函数通过 base 关键字调用基类构造函数,实现对基类构造函数间接调用。...接口是一组抽象方法集合,包含字段和具体方法。接口定义了一种合同,实现该接口类必须提供接口中定义所有方法。...重写涉及到基类和派生类之间关系,基类中虚方法派生类中被重新实现。重载是编译多态性,根据调用时提供参数类型来确定调用哪个方法。重写是运行时多态性,根据对象实际类型来确定调用哪个方法。...重载(Overload):重载指的是同一个类中可以定义多个具有相同名称但参数列表不同(参数个数、类型或顺序不同)方法。重载方法在编译时会根据调用时提供参数来确定调用哪个版本方法。

14610

C# 规范整理·语言要素

通过使用opera-tor关键字定义静态成员函数重载运算符,让开发人员可以像使用内置基元类型一样使用该类型。 10、创建对象需要考虑是否实现比较器 有特殊需要比较时候就考虑。...12、重写Equals也要重写GetHashCode 除非考虑到自定义类型会被用作基于散列集合键值;否则,建议重写Equals方法,因为这会带来一系列问题。...其中,值类型字段值被复制到副本中后,副本中修改不会影响到源对象对应值。而引用类型字段被复制到副本中是引用类型引用,而不是引用对象,副本中对引用类型字段值做修改会影响到源对象本身。...无论是浅拷贝还是深拷贝,微软都建议用类型继承IClone-able接口方式明确告诉调用者:该类型可以被拷贝。...var与dynamic有巨大区别 var是编译器语法糖 dynamic是运行时解析,在编译期,编译器不对其做任何检查

19750

编写高效 TS 代码一些建议

一、尽量减少重复代码 对于刚接触 TypeScript 小伙伴来说,定义接口,可能一不小心会出现以下类似的重复代码。...但因为接口中 releaseDate 和 recordingType 属性类型都是字符串,所以使用 Album 接口,可能会出现以下问题: const dangerous: Album = {...这样 renderPage 函数就可以根据统一 state 属性值来进行相应处理。因此,通过使用可辨识联合类型,让请求每种状态都是有效状态,不会出现无效状态问题。...return double(x); // Error } 为什么会提示以上错误呢?因为当 TypeScript 编译器处理函数重载,它会查找重载列表,直到找一个匹配签名。...对于 number | string 联合类型,很明显是匹配失败。 然而对于上述问题,虽然可以通过新增 string | number 重载签名来解决,但最好方案是使用条件类型

3.1K61

C# 规范整理:15个知识点!

通过使用opera-tor关键字定义静态成员函数重载运算符,让开发人员可以像使用内置基元类型一样使用该类型。 10、创建对象需要考虑是否实现比较器 有特殊需要比较时候就考虑。...12、重写Equals也要重写GetHashCode 除非考虑到自定义类型会被用作基于散列集合键值;否则,建议重写Equals方法,因为这会带来一系列问题。...其中,值类型字段值被复制到副本中后,副本中修改不会影响到源对象对应值。而引用类型字段被复制到副本中是引用类型引用,而不是引用对象,副本中对引用类型字段值做修改会影响到源对象本身。...无论是浅拷贝还是深拷贝,微软都建议用类型继承IClone-able接口方式明确告诉调用者:该类型可以被拷贝。...var与dynamic有巨大区别 var是编译器语法糖 dynamic是运行时解析,在编译期,编译器不对其做任何检查

15210

Effective-java-读书笔记之方法

.所以子类方法与基类签名相同, 则覆盖基类, 尽管对象声明为基类, 但是调用时用是子类实现.但重载选择工作是在编译进行, 完全基于参数编译类型.....当然如果对于每一种重载方法, 至少有一个对应参数两个重载方法中具有根本不同类型, 就不会产生迷惑..... -> 重载方法中, 不要在同样参数位置接受不同函数接口.第53条 慎用可变参数可变参数机制通过先创建一个数组, 数组大小为调用位置所传递参数数量, 然后将参数传到数组中, 最后将数组传递给方法..., 应该返回一个零长度数组或者集合, 没理由返回null. -> 不好用, 容易出错, 没有性能优势.开销考虑:在这个级别上担心性能问题是不明智, 除非分析表明这个方法是造成性能问题真正源头.对于返回任何元素调用...构造函数, 方法和字段声明之前加上doc注释.方法文档注释应该简洁地描述出它和客户端之间约定.

40950
领券