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

TypeScript交叉类型&联合类型

b')的时候代码报错,具体如下:解决上面的问题,只需要再加一个数据类型,其中 a为number类型,b为string类型。...联合类型可以是多个类型其中一个,可做选择,比如:string | number,它的取值可以是string类型也可以是number类型。...,r:string}interface Y{q:numberr:string,}type XY = X | Ylet value:XY = { q:1, r:'r'}多个接口类型进行联合函数接口类型进行联合...type A = 'a' | string; //string类型type B = false | boolean; //bolean 类型type C = 1 | number; //number类型当然枚举也会有类型缩减现象...,如下:enum Class{ A, B }type C = Class.A | Class;//Class类型我们发现:TS会把字面量类型和枚举成员类型缩减掉,只剩下原始类型和枚举类型思考一个问题

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

TypeScript类型守卫

缺点:用 in 关键字缩小数据类型必须有一个独特的属性作为判别标准,否则不能用 in 关键字interface Teacher{ name:string; courses:string;}interface...typeof只能识别以下类型:BooleanStringUndefinedFunctionNumberBigintSymbol写法:typeof a,a是变量(基本数据类型)奇怪为什么typeof不能识别..."){ console.log('B:'+ val.a) } //判断val的属性a的类型string类型 if(typeof val.a === "string"){...instanceof不能检测原始值类型的值,但是原始值对应的对象格式实例则可以检测。具体instanceof是怎么做类型守卫的呢?写法:a instanceof b,a是参数,b是一般都是接口类型。...Teacher | Student) => { if(isTeacher(cls)) { return cls.courses; }}(2)this形式下面代码中的 User 是抽象类,不能被实例化

30630

TypeScript类型声明

当我们使用TypeScript编写代码时,类型声明是非常重要的,它帮助我们定义变量、函数、类等的类型,从而提供更好的代码提示、类型检查和代码可读性。...以下是关于TypeScript类型声明的详细内容:基本类型声明在TypeScript中,我们可以使用以下关键字来声明基本类型:let num: number = 42;let str: string =...(Type Assertion)类型断言允许我们手动指定变量的类型,并告诉TypeScript编译器我们知道更多关于变量的类型信息。...interface Person { name: string; age?: number; readonly id: number;}以上是关于TypeScript类型声明的一些重要内容。...通过合理使用类型声明,我们可以增强代码的可读性、类型安全性和可维护性。类型声明是TypeScript的核心特性之一,可以帮助我们构建更健壮的代码和应用程序。

21820

TypeScript 基础类型

TypeScript 基础类型 TypeScript 包含的数据类型如下表: 数据类型 关键字 描述 任意类型 any 声明为 any 的变量可以赋予任意类型的值。...Null 和 Undefined 是其他任何类型(包括 void)的子类型,可以赋值其它类型,如数字类型,此时,赋值后的类型会变成 null 或 undefined。...而在TypeScript中启用严格的空校验(--strictNullChecks)特性,就可以使得null 和 undefined 只能被赋值 void 或本身对应的类型,示例代码如下: // 启用...; // 运行错误,数字类型不能转为 never 类型 x = 123; // 运行正确,never 类型可以赋值 never类型 x = (()=>{ throw new Error('exception...')})(); // 运行正确,never 类型可以赋值 数字类型 y = (()=>{ throw new Error('exception')})(); // 返回值为 never 的函数可以是抛出异常的情况

60010

TypeScript 基础类型

一、TypeScript 的安装及使用 1、安装 npm i typescript -g // ts 全局包 npm i ts-node -g // 使用 ts-node 直接运行 ts...string 可以使用单引号(')、双引号(")来表示字符串类型 使用反引号(`)来定义多行文本和内嵌表达式 let name: string = "Faker"; let title: string...元组与数组相似,但元组每一项的数据类型可以不同(而数组需要使用 any 类型才可以实现每一项类型不同) let x: [string, number]; x = ['Faker', 1]; /...(包括 null 和 undefined)的子类型,代表从不会出现的值,这意味着声明为 never 类型的变量只能被 never 类型赋值,在函数中它通常表现为抛出异常或无法执行到终止点(例如无限循环...) let x: never; // 运行错误,数字类型不能转为 never 类型 x = 123;

1.3K30

TypeScript 元组类型

在 JavaScript 中是没有元组的,元组是 TypeScript 中特有的类型,其工作方式类似于数组。 元组可用于定义具有有限数量的未命名属性的类型。每个属性都有一个关联的类型。...二、元组类型的解构赋值 通过前面的介绍,我们已经知道可以通过下标的方式来访问元组中的元素,当元组中的元素较多时,这种方式并不是那么便捷。...其实元组也是支持解构赋值的: let employee: [number, string] = [1, "Semlinker"]; let [id, username] = employee; console.log...,如果解构数组元素的个数是不能超过元组中元素的个数,否则也会出现错误,比如: let employee: [number, string] = [1, "Semlinker"]; let [id, username...在该函数的第一行中,我们把 args 元组中保存的值解构赋值 arg1、arg2 和 arg3 这三种不同类型的变量,最后我们分别输出三个变量的值。

1.4K20

TypeScript类型断言

什么是类型断言 类型断言是可以手动指定一个值得类型 类型断言 let num3:number|string="10" num3=20 console.log(num3.length) 通过如上代码,当我们获取...length的时候会报错因为我们赋值为20所以不存在属性length,那么我们就可以采用类型断言去做处理 值 function getAssert(name:string|number) {...return (name).length; } 值as类型 function getAssert(name:string|number) { return (name as string...).length; } 因为只有在我们为string类型的时候才有length属性,所以这一块我们要采用类型断言的方式进行处理....通过如下代码我们可以发现会出现异常正如下方图片所示,因为他并非是强制类型转换,他只能断言联合类型中存在的类型.不存在的类型是不允许的. function getAssert(name:string|number

71710

TypeScript函数类型

声明式类型函数 通过如下代码我们实现了一个返回值为number类型的方法,同时我们也对返回值和参数进行了约束 function funcType(name:string,age:number):number...("张三",18) 对方法进行添加默认值 function funcType2(name:string="张三",age:number=18):number{ return age; } 表达式类型函数...=function(name:string,age:number):number{ return age; } 联合类型重载 通过如下代码我们可以实现一个联合类型函数,当然这可以采用重载的方式...当我们的参数是number类型时我们的返回值是number类型,当我们的参数是string类型时我们的返回值是string类型,这一块具体在我们实际业务中可以根据实际需求进行相应修改 function...getVal(val:number):number; function getVal(val:string):string; function getVal(val:string|number):number

77520

TypeScript 类型系统

string 类型的值赋值变量 a, 因为 string 和 number 类型不兼容。...而我们可以将 string,Object,Array 类型的值赋值 b,因此 它们和 any 类型兼容。简单来说就是,一旦一个变量被标注了某种类型,那么其就只能接受这个类型以及它的子类型。 ?...根据第一步变量设定的类型进行类型检查,即不允许类型不兼容的赋值, 不允许使用值空间和类型空间不存在的变量和类型等。 第一个点是通过类型注解的语法来完成。...length, includes 以及 toString 是 String 的「成员变量」, 生活在值空间, 值空间虽然不能直接和类型空间接触,但是类型空间可以作用在值空间,从而其添加类型(如上图黄色部分...如果只会你这么写就会报错: a = "1"; 因此 string 类型的值不能赋值 number 类型的变量。我们可以使用 Typescript 内置的 typeof 关键字来证明一下。

1.4K10

TypeScript 枚举类型

TypeScript支持数字的和基于字符串的枚举。...因为 JavaScript 中并没有存在枚举类型,因此为了能够在大多数浏览器中正常运行,上面定义的 RequestMethod 枚举会被编译成以下 ES5 代码: "use strict"; var RequestMethod...当一个表达式满足下面条件之一时,它就是一个常量枚举表达式: 一个枚举表达式字面量(主要是字符串字面量或数字字面量); 一个对之前定义的常量枚举成员的引用(可以是在不同的枚举类型中定义的); 带括号的常量枚举表达式...MediaTypes["XML"] = "application/xml"; })(MediaTypes || (MediaTypes = {})); 这意味着我们可以通过键的值来解析值,但是不能通过键的值来解析键...RequestMethod = {})); var methods = [0 /* Get */, 1 /* Post */, 2 /* Put */]; 四、参考资源 mariusschulz —— string-enums-in-typescript

1.4K10

TypeScript 类型系统

针对 JavaScript 上面的问题,聪明的同学就想那我们就 JavaScript 加个类型吧,和 Java 一样,能够对变量的类型进行定义,这个想法就是 TypeScript类型系统, 在很大程度上弥补了...从 TypeScript 的名字就可以看出来,「类型」是其最核心的特性,TypeScript 也主要致力于解决 JavaScript 的类型混乱问题。...TypeScript 是静态类型 类型系统按照「类型检查的时机」来分类,可以分为下面 2 种 动态类型 静态类型 动态类型是指在运行时才会进行类型检查,这种语言的类型错误往往会导致运行时错误。...TypeScript 在运行前需要先编译为 JavaScript,而在编译阶段就会进行类型检查,所以 TypeScript 是静态类型,这段 TypeScript 代码在编译阶段就会报错了: let foo...大部分 JavaScript 代码都只需要经过少量的修改(或者完全不用修改)就变成 TypeScript 代码,这得益于 TypeScript 强大的[类型推论][],即使不去手动声明变量 foo 的类型

82700

TypeScript】条件类型

条件类型(Conditional Types)是TypeScript中一种强大的类型系统特性,它允许我们根据类型关系来推断和选择类型。...X : Y这表示如果类型T可以赋值类型U,则条件类型为X,否则为Y。...如果T可以赋值U,则返回T;否则返回never类型。条件类型嵌套条件类型还可以相互嵌套,以构建更复杂的类型逻辑。type MyType = T extends string ?...U : T;type Element = MyType; // number在上面的例子中,当我们传入一个泛型类型number[]MyType时,条件类型会智能地推断出数组元素类型为...条件类型TypeScript类型系统的一个重要部分,它允许我们在类型级别上进行条件分支和类型选择。通过巧妙地组合泛型、联合类型和条件类型,我们可以定义出非常复杂且强大的类型

21440

TypeScript类型声明

前言本文主要讲解TypeScript的基本数据结构,主要包括JS基本数据类型以及TS特有的数据类型。...类型,any类型可以赋值任意类型unknown,never都不允许执行变量的方法以及访问内部属性在unknown没有被断言或细化到一个确切类型之前,unknown不可以赋值其它类型,除了它自己和any...类型的变量let testValue1: unknown = unknownValue;//赋值any类型的变量let testValue2: any = unknownValue;错误示范://赋值...具有以下特点:never类型是所有类型的子类型,即never类型可以赋值任何类型。其他任何类型均不是never类型的子类型,即其他类型均不可赋值never类型,除了never本身。...变量也可以声明为never类型,但其不能赋值设置变量类型为never,表示永远不能执行完或者永远Error,具体示例如下:函数中出现了死循环,永远不能执行完,因此其函数类型为:() => neverfunction

33630
领券