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

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

它对于确保在使用配置对象或在组件或函数之间传递数据等场景中的不变性特别有用。 11、TypeScript 中的可区分联合有什么用处?...答案:可区分联合(也称为标记联合)是一种结合了联合类型、文字类型和类型保护的模式。 当一个对象可以有多个形状但共享一个公共属性(通常是文字类型)时,可以使用它们,该属性可用于缩小其确切形状。...19、如何在 TypeScript 中使用类型断言?何时需要它? 答案:TypeScript 中的类型断言是一种告诉编译器将变量视为某种类型的方法。这就像其他语言中的类型转换。...在 TypeScript 中,当装饰器应用于类成员时,它们会提供元数据或更改被装饰元素的行为。它们可用于各种任务,例如日志记录、验证或增强功能。...答:TypeScript 的类型推断是指编译器在没有显式类型注释的情况下自动推断和分配类型的能力。虽然鼓励显式类型,但编译器会尽可能使用上下文(如变量初始化、返回语句等)来推断类型。

1K30

让你的TypeScript代码更优雅,这10个特性你需要了解下

在下面的例子中,tuple 的类型被推断为 readonly [1, "two"],表示这个元组是只读的,并且元素类型和顺序固定。...九、 巧用 TypeScript 的区分联合类型实现精确类型检查 TypeScript 的区分联合类型(Discriminated Unions)允许你通过共同的属性来区分多个相关类型。...Shape 类型是 Square 和 Rectangle 的联合类型。 2、区分联合类型的应用 通过区分联合类型,我们可以在处理联合类型时利用 kind 属性进行类型检查。...这种方式避免了类型断言,保证了类型检查的准确性。 3、区分联合类型的优势 使用区分联合类型有以下几个优势: 类型安全:通过共同的区分属性,可以确保在处理不同类型时的类型安全性,避免类型错误。...结束 通过以上的介绍,我们可以看到 TypeScript 提供的这些高级特性,如类型推断、条件类型、模板字面量类型、类型谓词、索引访问类型、keyof 类型操作符、映射类型、实用类型、区分联合类型和声明合并等

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

    Node.js 项目 TypeScript 改造指南(二)

    最近笔者把一个中等规模的 Koa2 项目迁移到 TypeScript,和大家分享一下 TypeScript 实践中的经验和技巧。...自定义断言函数本质上是把类型验证的工作交给了开发者,一个错误的断言函数,或者直接写一个空的断言函数,同样会导致类型系统推导错误。...本项目是一个管理系统,核心模型就是数据库表,对应到代码里首先就是 Model 层,围绕这个核心会有很多 Model 类型的变体和衍生类型。...:number } 收窄类型 TypeScript 没有提供类型转换的能力,我们如何从 any、unknown、复杂的联合类型中获取具体类型就成为一个问题。...使用可辨识联合「Discriminated Unions[15]」可以让我们区分相似的类型。

    3.6K10

    以淘宝店铺为例,谈谈 TypeScript ESLint 规则集考量

    ,对于 TypeScript 代码进行约束的思考,以及如何在自己的团队内推广这一套规则。...explicit-module-boundary-types 函数与类方法的返回值需要被显式的指定,而不是依赖类型推导,如: const foo = (): Foo => {}; 为什么:通过显式指定来直观的区分函数的功能...此规则的本质是检查经过断言后的类型子集是否仅剔除了空值部分,因此无需担心对于多种有实际意义的类型分支的联合类型误判。.../index.module.scss"; restrict-template-expressions 模板字符串中的计算表达式其返回值必须是字符串,此规则可以被配置为允许数字、布尔值、可能为 null...如联合类型变量中每一条类型分支可能都需要特殊的处理逻辑。

    2.7K30

    4000字讲清 《深入理解TypeScript》一书 【基础篇】

    类型断言和类型转换 它之所以不被称为「类型转换」,是因为转换通常意味着某种运行时的支持。...; // ok } TypeScript 是怎么确定单个断言是否足够 当 S 类型是 T 类型的子集,或者 T 类型是 S 类型的子集时,S 能被成功断言成 T。...如果在你的参数里,不止拥有一个泛型,你应该使用一个更语义化名称,如 TKey 和 TValue (通常情况下,以 T 作为泛型的前缀,在其他语言如 C++ 里,也被称为模板) 变体 对类型兼容性来说,变体是一个利于理解和重要的概念...Never never 类型是 TypeScript 中的底层类型。...它自然被分配的一些例子: 一个从来不会有返回值的函数(如:如果函数内含有 while(true) {}); 一个总是会抛出错误的函数(如:function foo() { throw new Error

    1.9K30

    TypeScript 联合类型的定义、使用场景和注意事项

    在 TypeScript 中,联合类型(Union Types)是一种用于表示变量或参数可以具有多种类型的概念。它允许我们将多个类型中的一个或多个类型作为一个整体来使用。...本文将详细介绍 TypeScript 联合类型的定义、使用场景和注意事项,并提供一些示例来帮助理解。定义联合类型在 TypeScript 中,可以使用 | 符号将多个类型组合成一个联合类型。...使用联合类型类型断言当我们使用联合类型的变量时,有时候需要告诉 TypeScript 具体的类型,以便进行相应的操作。可以使用类型断言(Type Assertion)来实现。...交叉类型与联合类型的结合在 TypeScript 中,还可以使用交叉类型(Intersection Types)和联合类型结合使用,从而实现更复杂的类型定义。...总结本文详细介绍了 TypeScript 联合类型的定义、使用场景和注意事项,并提供了一些示例帮助理解。我们学习了如何使用类型断言和类型保护来处理联合类型的变量,以及如何结合交叉类型使用联合类型。

    1K41

    让你更好使用 Typescript 的11个技巧

    相反,将其想象成集合会更容易推导出正确的行为: 每种类型都是值的集合 有些集合是无限的,如 string、object;有些是有限的,如 boolean、undefined,... unknown 是通用集合...console.log(x.length); // disallowed because x is now number } else { ... } } 使用带有区分的联合类型而不是可选字段...相反,区分联合是一个更好的解决方案: type Circle = { kind: 'circle'; radius: number }; type Rect = { kind: 'rect'; width...默认情况下,当typescript遇到一个联合类型(这里是string | number)的通用参数(这里是T)时,它会分配到每个组成元素,这就是为什么这里会得到string[] | number[]。...在实践中,您可能会发现直接使用它们并不常见;然而,这些技术被专门为Typescript设计的库大量使用:比如Prisma和tRPC。了解这些技巧可以帮助您更好地了解这些工具如何在引擎盖下工作。

    1.1K20

    TypeScript 官方手册翻译计划【二】:普通类型

    在学习类型本身的同时,我们也会学习如何在某些地方使用这些类型去组成新的结构。 首先,我们先来回顾一下编写 JavaScript 或者 TypeScript 代码时最基础和最常用的类型。...联合类型由两个或者两个以上的类型组成,它代表的是可以取这些类型中任意一种类型的值。每一种类型称为联合类型的成员。...即使类型断言是错误的,也不会抛出异常或者产生 null TypeScript 只允许断言之后的类型比之前的类型更具体或者更不具体。...有两种方式可以解决这个问题: 通过添加类型断言改变类型的推断结果: 方法一表示“我有意让 req.method 一直采用字面量类型 "GET"”,从而阻止后续将其赋值为其它字符串;方法二表示“出于某种理由...枚举 枚举是 TypeScript 添加到 JavaScript 中的一项特性。它允许描述一个值,该值可以是一组可能的命名常量中的一个。

    2.3K20

    TypeScript手记(六)

    类型推断 这节介绍 TypeScript 里的类型推断。即,类型是在哪里如何被推断的。 基础 TypeScript 里,在有些没有明确指出类型的地方,类型推断会帮助提供类型。...如果一个值是联合类型,我们只能访问此联合类型的所有类型里共有的成员。...JavaScript 里常用来区分这 2 个可能值的方法是检查成员是否存在。如之前提及的,我们只能访问联合类型中共同拥有的成员。...在实际应用中,字符串字面量类型可以与联合类型,类型保护很好的配合。通过结合使用这些特性,你可以实现类似枚举类型的字符串。...但是 TypeScript 的学习不能仅仅靠看官网文档,你还需要动手实践,在实践中你才能真正掌握 TypeScript。

    1K10

    深度讲解TS:这样学TS,迟早进大厂【11】:类型断言

    类型断言的用途§ 类型断言的常见用途有以下几种: 将一个联合类型断言为其中一个类型§ 之前提到过,当 TypeScript 不确定一个联合类型的变量到底是哪个类型的时候,我们只能访问此联合类型的所有类型中共有的属性或方法...需要注意的是,将一个变量断言为 any 可以说是解决 TypeScript 中类型问题的最后一个手段。 它极有可能掩盖了真正的类型错误,所以如果不是非常确定,就不要使用 as any。...将 any 断言为一个具体的类型§ 在日常的开发中,我们不可避免的需要处理 any 类型的变量,它们可能是由于第三方库未能定义好自己的类型,也有可能是历史遗留的或其他人编写的烂代码,还可能是受到 TypeScript...类型断言的限制§ 本小结的前置知识点:[结构类型系统(TODO)][]、[类型兼容性(TODO)][] 从上面的例子中,我们可以总结出: 联合类型可以被断言为其中一个类型 父类可以被断言为子类 任何类型都可以被断言为...综上所述: 联合类型可以被断言为其中一个类型 父类可以被断言为子类 任何类型都可以被断言为 any any 可以被断言为任何类型 要使得 A 能够被断言为 B,只需要 A 兼容 B 或 B 兼容 A 即可

    1.3K20

    TS 进阶 - 类型基础

    在 TypeScript 中,要引用已创建的 unique symbol 类型,需要使用类型查询操作符 typeof,如 typeof sym1。...{}) 是一个合法的函数类型 可以在联合类型中进一步嵌套联合类型,这些嵌套的联合类型最终都会被展平到第一级 联合类型常用场景之一是通过多个对象类型的联合,来实现手动的互斥属性,即这一属性如果有 字段1...在编译时同样会被移除,同时也是被存储在内存中的类型空间而非值空间。 # 枚举 如果说字面量类型是对原始类型的进一步扩展,那么某些方面枚举类型就是对对象类型的进一步扩展。...在 TypeScript 中无法声明静态的抽象成员。 对于抽象类,其本质是描述类的结构,因此也可以用 interface 来声明类的结构。...any 类型的万能性会导致其被经常滥用,需要注意: 如果是类型不兼容报错导致要使用 any,考虑使用类型断言代替 如果是类型太复杂导致不想全部声明要使用 any, 考虑去将这里的类型去断言为需要的最简类型

    1.8K50

    TypeScript 非空断言

    答案是有的,就是使用 TypeScript 2.0 提供的非空断言操作符: function sayHello(name: string | undefined) { let sname: string...(); //OK } 2.3 使用非空断言操作符的注意事项 因为 ! 非空断言操作符会从编译生成的 JavaScript 代码中移除,所以在实际使用的过程中,要特别注意。...; 语句可以通过 TypeScript 类型检查器的检查。但在生成的 ES5 代码中,! 非空断言操作符被移除了,所以在浏览器中执行以上代码,在控制台会输出 undefined。...,我们把为 null 和非 null 的响应完美的区分开来,还避免了再次使用非空断言,此外还大大提高了程序的可读性。...在 TypeScript 实际项目的开发过程中,除了使用非空断言(!)之外,读者还可以使用 TypeScript 3.7 版本中新引入的可选链运算符(?.)和空值合并运算符(??)

    20.6K65

    TypeScript typeof 操作符

    阅读须知:本文示例的运行环境是 TypeScript 官网的 Playground,对应的编译器版本是 v3.8.3。...一、typeof 简介 在 TypeScript 中,typeof 操作符可以用来获取一个变量或对象的类型。...toArray; // -> (x: number) => number[] 二、const 断言 TypeScript 3.4 引入了一种新的字面量构造方式,也称为 const 断言。...当我们使用 const 断言构造新的字面量表达式时,我们可以向编程语言发出以下信号: 表达式中的任何字面量类型都不应该被扩展; 对象字面量的属性,将使用 readonly 修饰; 数组字面量将变成 readonly...三、typeof 和 keyof 操作符 在 TypeScript 中,typeof 操作符可以用来获取一个变量或对象的类型。而 keyof 操作符可以用于获取某种类型的所有键,其返回类型是联合类型。

    6.4K52

    TypeScript系列教程四《扩展类型》

    在JS基础上,TS又扩展了一些类型的概念,为了和基础类型区分,暂定扩展类型概念。...TypeScript 最好玩的应该就是类型系统,随意组合创造,提供基础联合类型、交叉类型,还有一系列的高级函数可以玩转类型。...联合类型 ---- 联合类型是玩转类型的基础,用 | 表示,即是又是的意思。有时候我们希望一个变量既可以是字符串又可以是number,除了泛型之外,联合类型是很好的处理方式。...类型断言 — as ---- 有时候我们不知道值得类型信息 情况一:document.getElementByIdTypeScript 只知道返回HTMLElement的一种,但是你需要知道返回的类型是...TypeScript 创造这种类型的灵感来与,var 和 let 声明变量的时候是可以改变的,const 不能改变时值本身。 ?

    1.1K20

    TypeScript学习笔记(二)—— TypeScript基础

    5.2、访问联合类型的属性或方法 当 TypeScript 不确定一个联合类型的变量到底是哪个类型的时候,我们只能访问此联合类型的所有类型里共有的属性或方法: function getLength(something...9.2、类型断言的用途 类型断言的常见用途有以下几种: 9.2.1、将一个联合类型断言为其中一个类型 之前提到过,当 TypeScript 不确定一个联合类型的变量到底是哪个类型的时候,我们只能访问此联合类型的所有类型中共有的属性或方法...9.3、类型断言的限制 本小节的前置知识点:[结构类型系统(TODO)][]、[类型兼容性(TODO)][] 从上面的例子中,我们可以总结出: 联合类型可以被断言为其中一个类型 父类可以被断言为子类...,就不会有任何问题,故「子类可以被断言为父类」 需要注意的是,这里我们使用了简化的父类子类的关系来表达类型的兼容性,而实际上 TypeScript 在判断类型的兼容性时,比这种情况复杂很多,详细请参考[...综上所述: 联合类型可以被断言为其中一个类型 父类可以被断言为子类 任何类型都可以被断言为 any any 可以被断言为任何类型 要使得 A 能够被断言为 B,只需要 A 兼容 B 或 B 兼容 A 即可

    5.1K20

    Typescript-基础类型

    和Javascript一样,typescript里的所有数字都是浮点数。这些浮点数的类型是number。...除了支持十进制和十六进制字面量,Typescript还支持ECMAScript2015中引入的二进制和八进制字面量。...,any也是有用的,比如一个数组,它包含了不同的类型的数据: let list: any[] = [1, true, 'free']; list[1] = 100; Void 某种程度上说,void类型像是与...变量也可能是never类型,当他们被永不为真的类型保护所约束时。never 是任何类型的子类型,也可以赋值给任何类型。然而,没有类型可以赋值给never类型,即使any也不能赋值给never。 <!...string).length; 两种语法是等价的,但是在Typescript里面使用JSX时,只有as语法断言是允许的。

    62930

    写代码无BUG,网易云前端单元测试方案总结

    通用测试 单元测试最核心的部分就是做断言,比如传统语言中的 assert 函数,如果当前程序的某种状态符合 assert 的期望此程序才能正常执行,否则直接退出应用。...所以我们可以直接用 Node 中自带的 assert 模块做断言。...而我们在做单元测时往往需要断言库能够提供良好的测试报告,这样才能一目了然地看到有哪些断言通过没通过,所以使用专业的单元测试断言库还是很有必要。 chai ?...chai chai 是目前很流行的断言库,相比于同类产品比较突出。...jest Jest 是 facebook 出的一个完整的单元测试技术方案,集 测试框架, 断言库, 启动器, 快照,沙箱,mock工具于一身,也是 React 官方使用的测试工具。

    9.6K20

    TypeScript入门第一天,所有类型+基础用法+接口使用

    二、类型断言 类型断言可以用来手动指定一个值的类型。...string 类型 console.log(str2) //用完断言打印数字1 注意:断言不被称为类型转换,是因为转换通常意味着某种运行时的支持。...但是,类型断言纯粹是一个编译时语法 。...三、typescript接口 TypeScript的核心原则之一是对值所具有的结构进行类型检查,接口是一系列抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要由具体的类去实现,然后第三方就可以通过这组抽象方法调用...TypeScript具有ReadonlyArray类型,可以确保数组创建后再也不能被修改 let A: number[] = [1, 2, 3, 4]; let B: ReadonlyArray<

    65000

    如何做前端单元测试

    调查中的另一个有趣的见解是,在大型组织中单元测试更受欢迎。其中一个原因可能是,由于大型组织需要处理大规模的产品,以及频繁的功能迭代吧。这种持续的迭代方式,迫使他们进行自动化测试的投入。..."] } 为了解决编辑器对 jest 断言方法的类型报错,如 test、expect 的报错,你还需要安装 npm install --save-dev @types/jest ....单元测试覆盖率是一种软件测试的度量指标,指在所有功能代码中,完成了单元测试的代码所占的比例。...有很多自动化测试框架工具可以提供这一统计数据,其中最基础的计算方式为: 单元测试覆盖率 = 被测代码行数 / 参测代码总行数 * 100% 如何生成?...(3); }) .toThorw 能够让我们测试被测试方法是否按照预期抛出异常 但是需要注意的是:我们必须使用一个函数将被测试的函数做一个包装,正如下面 getIntArrayWrapFn 所做的那样

    3.3K20

    Spring Boot使用单元测试

    ⌨ 详细介绍:Spring Boot 中的单元测试 前言 在这篇文章中,我们将深入介绍如何在 Spring Boot 中进行单元测试,以及一些常用的工具和技巧。...我们将侧重于以下几个方面: Service 层单元测试 Controller 层单元测试 使用新的断言 assertThat 单元测试中的事务回滚 让我们一一来探讨这些内容!...它允许我们通过 Hamcrest 提供的匹配符来表达对前面变量所期望的值的声明。下面是一些常用的匹配符示例: equalTo:断言被测的值等于期望值。...equalToIgnoringCase:忽略大小写,断言被测的字符串等于期望字符串。 equalToIgnoringWhiteSpace:忽略头尾的空格,断言被测的字符串等于期望字符串。...总结 在本文中,我们深入了解了如何在 Spring Boot 中进行单元测试,并介绍了一些常用的工具和技巧,如 MockMvc 和 assertThat。

    16110
    领券