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

TypeScript类型声明

前言本文主要讲解TypeScript的基本数据结构,主要包括JS基本数据类型以及TS特有的数据类型。...JS写法如下: let arr = ['语文','数学']TS声明数组有多种方式,具体如下:(1)数组的数据类型一致Array:声明一个数组,数组类型定义的类型,比如:Array//声明一个数组,并且数组的数据类型都是字符串let arr:Array = '语文','数学'undefinedlet arrA:string[] = '语文','数学'undefined...数组数据的位置、类型以及个数必须要和声明类型声明类型的位置、声明类型的个数保持一致,否则就会报错。...;console.log(booleanValue)//trueany使用过程中就像一个潘多拉魔盒,即使使用了断言,也丧失了静态类型检查阶段发现错误的可能性。

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

Typescript的复杂类型声明

Typescript为javascript加入了众多类型声明语法,灵活使用可使代码变得健壮,不严谨的类型声明会带来后期的维护麻烦。...本篇假设读者已经学会ts的基础类型声明语法,包括type、interface、extends和泛型,在此基础上,聊一聊一些更加复杂的类型声明场景以及解决办法。...场景1:子集类型 假设你有一个Person声明如下: class Person{ name: string; score: number; advance: (score:...最好的办法是自动筛选出Person符合某一规则的属性,生成一个新的类型。怎么做到呢?...我们先来学习一些基础知识: 映射类型和条件类型 首先,vscode中新建一个.ts文件,键入代码let p = Readonly,按下ctrl(mac的cmd)键点击Readonly进入定义

7K50

TypeScript】TS类型声明(三)

enum(枚举)枚举主要分为数字类型枚举、字符串类型枚举、异构。 语法:enum + 变量名,意思是定义了一个叫做“变量名”的枚举类型 优点:定义一些常量,可以清晰地表达意图或创建一组有区别的用例。...(1)数字型枚举含义:枚举成员都是number类型,如果没有对枚举对象的枚举成员赋值,那么会默认从枚举对象的第一个枚举成员的值是0,并依次递增。...注意:含有字符串值成员的枚举不允许使用计算值,具体意思就是当枚举对象存在有value是字符串的枚举成员的时候,不能将其他枚举成员的value设置为计算值。...,字符串类型的枚举成员不能反向映射。...注意以下是错误用法,因为含有字符串值成员的枚举不允许使用计算值enum Enum {A,B = 3*6,C = 'C',D = 'd',E = 9,F}(4)枚举成员的值的两种形式-计算值和常量枚举对象成员的

23110

TypeScript】TS类型声明(二)

前言--本文主要讲解TypeScript的基本数据结构,主要包括JS基本数据类型以及TS特有的数据类型。...,具体如下:(1)数组的数据类型一致Array:声明一个数组,数组类型定义的类型,比如:Array//声明一个数组,并且数组的数据类型都是字符串let arr:Array<...,数组类型为[]前定义的类型,比如number[]let arr:string[] = ['a'](2)数组的数据类型不一致联合数据声明:比如(string|number)[],声明一个数组,数组类型为字符串...数组数据的类型可以不随定义的类型位置的限定。...数组数据的位置、类型以及个数必须要和声明类型声明类型的位置、声明类型的个数保持一致,否则就会报错。

18410

TypeScript】TS类型声明(四)

any(任意类型声明变量类型为any时编译时会绕过所有类型的检测,直接通过编译阶段的检查可以任意访问属性的方法和属性any类型可以赋值给任意类型如果变量初始没有定义类型,默认为any;经过赋值后,TS...= anyValue;console.log(booleanValue)//trueany使用过程中就像一个潘多拉魔盒,即使使用了断言,也丧失了静态类型检查阶段发现错误的可能性。...类型,any类型可以赋值给任意类型unknown,never 都不允许执行变量的方法以及访问内部属性unknown没有被断言或细化到一个确切类型之前,unknown不可以赋值给其它类型,除了它自己和any...,强制让ts编译器相信我们在做什么操作void(空类型声明对象类型为void时返回为空值function func(): void { }声明一个变量为void 时只能将它赋值为 undefined...即使any类型也不可以赋值给never类型。返回类型为never的函数,其终点必须是不可执行的,例如函数过程抛出了错误或者存在死循环。

17610

TypeScript类型断言-类型声明和转换

TS并不能判断使用联合类型时具体是那种类型?当我们不知道是什么类型的情况下要使用某个类型特有的属性或者方法,那么就可以用断言来实现,它实际上是对编辑器做了提前告知的行为,但是并不能保证运行中报错。...主要有两种方式来实现,具体如下:断言形式(1)尖括号形式语法:+value,尖括号填写具体的类型。...但是编译成JS后,运行过程中就报错了,如下:所以除非确切的知道变量的数据类型,否则不要使用类型断言,这是因为类型断言会让 TypeScript 编译器将变量当做指定的类型,而不管它实际的类型程序运行时可能有类型错误...以VScode编辑器为例点击设置按钮后,选择设置选项图片搜索strictNullChecks,然后勾选下面的选项就可以啦图片(2)肯定断言-肯定化保证赋值含义:允许实例属性或者变量声明后面放置一个 !...我们可以变量声明的时候就告诉编辑器该属性一定会被赋值,即在变量名后面加个!符号let score!

27710

聊聊TypeScript类型声明那些最佳实践

然而在改造的过程,逐步意识到TypeScript这门语言的艺术魅力 人狠话不多,下面我们先来聊一下 TypeScript 类型声明相关的技巧: 先了解TypeScript类型系统 TypeScript...logPoint(rect) // 类型检查也通过,因为Rect具有Point相同的结构,从感官上说就是React继承了Point的结构 此外,如果对象或具有所有必需的属性,则TypeScript会认为它们成功匹配.../function 类型 注意:由于 interface 支持同名类型自动合并,我们开发一些组件或工具库时,对于出入参的类型应该尽可能地使用 interface 声明,方便开发者调用时做自定义扩展...TypeScript 类型声明非常灵活,这也意味着一千个莎士比亚就能写出一千个哈姆雷特。...团队协作,为了更好的可维护性, 我们应该尽可能地践行以下3条原则: 泛型优于联合类型 举个官方的示例代码做比较: interface Bird { fly(): void layEggs()

1.4K20

TypeScript】TS类型断言-类型声明和转换(七)

TS并不能判断使用联合类型时具体是那种类型?当我们不知道是什么类型的情况下要使用某个类型特有的属性或者方法,那么就可以用断言来实现,它实际上是对编辑器做了提前告知的行为,但是并不能保证运行中报错。...主要有两种方式来实现,具体如下:断言形式(1)尖括号形式语法:+value,尖括号填写具体的类型。...但是编译成JS后,运行过程中就报错了,所以除非确切的知道变量的数据类型,否则不要使用类型断言,这是因为类型断言会让 TypeScript 编译器将变量当做指定的类型,而不管它实际的类型程序运行时可能有类型错误...以VScode编辑器为例点击设置按钮后,选择设置选项搜索strictNullChecks,然后勾选下面的选项就可以啦 (2)肯定断言-肯定化保证赋值含义:允许实例属性或者变量声明后面放置一个 !...number;startClass();console.log('' + score); // 使用前赋值function startClass() { score = 5;}编辑器中会直接报错,我们可以变量声明的时候就告诉编辑器该属性一定会被赋值

26610

TypeScript 的变量声明:变量声明的语法、变量的作用域、变量的类型推断和类型断言

TypeScript ,变量声明是非常重要的一个概念,它定义了变量的名称和类型。通过正确地声明变量,我们可以增强代码的可读性、可维护性和可扩展性。...本文将详细介绍 TypeScript 的变量声明,包括变量声明的语法、变量的作用域、变量的类型推断和类型断言等内容。...变量声明 TypeScript ,我们可以使用 let 和 const 关键字来声明变量。let 用于声明可变(可重新赋值)的变量,而 const 用于声明不可变(不可重新赋值)的变量。... TypeScript ,变量的作用域可以分为全局作用域和局部作用域两种。全局作用域全局作用域中声明的变量可以整个程序的任何地方访问到。...总结本文详细介绍了 TypeScript 的变量声明,包括变量声明的语法、变量的作用域、变量的类型推断和类型断言等内容。

42420

TypeScript魔法堂:函数类型声明其实很复杂

本系列将重点分享TypeScript类型声明相关实践 函数类型声明其实很复杂 玩转交叉类型和联合类型 class,inteface和type到底选哪个?...的函数重载并没有让我们定义得更轻松,可以理解为原JavaScript实现的基础上添加类型声明信息,这样反而让定义变得复杂,但为了能更安全地调用却是值得的。...高阶函数的类型声明 高阶函数作为JavaScript最为人称道的特性,TypeScript怎能缺席呢? // 1 let foo1: (message: string, count?...1、2和3方式声明了变量的值类型,而2的interface FooDecl和4声明类型本身。 foo1,foo2,foo3作为变量(value)可作为传递给函数的实参,和函数的返回值。...因此针对它们的值类型声明是无法被重用的,也无法用于函数声明和其它类型声明; FooDecl,FooType作为类型声明,及可以被反复重用在各函数声明和其它类型声明

1.2K10

TypeScript基础(四)扩展类型 -

引言--TypeScript是一种静态类型的编程语言,它是JavaScript的超集,可以编译成纯JavaScript代码。...-是一种模板或蓝图,用于创建具有相同属性和方法的对象。TypeScript,可以使用关键字class来定义一个可以包含属性(成员变量)和方法(成员函数)。...构造函数是一种特殊类型的方法,创建对象时被调用。在上面的例子,我们使用关键字constructor定义了一个构造函数,并在其中接收一个参数并将其赋值给属性name。...继承--继承是一种面向对象编程的重要概念,它允许一个继承另一个的属性和方法。TypeScript,可以使用关键字extends来实现继承。...访问修饰符TypeScript的访问修饰符用于控制的属性和方法的可访问性。TypeScript提供了三种访问修饰符:public、private和protected。

27030

TypeScript

TypeScript是一种用于创建对象的蓝图,它定义了对象的属性和方法。可以看作是对象的模板,通过实例化可以创建具体的对象。定义要定义一个,可以使用 class 关键字后跟的名称。...属性的属性定义了对象的状态,它们保存了对象的数据。class Person { name: string; age: number;}构造函数构造函数是一个特殊的方法,创建对象时被调用。...const person = new Person("John", 25);的继承TypeScript支持的继承,可以通过继承一个基来创建派生。....`); }}派生可以继承基的属性和方法,并可以添加自己的属性和方法。访问修饰符TypeScript提供了访问修饰符来控制的属性和方法的访问权限。...public:默认的访问修饰符,公开访问,可以的内部和外部访问。private:私有访问,只能在的内部访问。protected:受保护的访问,只能在的内部和派生访问。

73330
领券