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

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

19、如何在 TypeScript使用类型断言?何时需要它? 答案:TypeScript 的类型断言是一种告诉编译器将变量视为某种类型的方法。这就像其他语言中的类型转换。...您比 TypeScript 的类型推断系统更了解变量的类型,例如在处理联合类型或任何类型,它会很有用。 20、描述 TypeScript 索引签名的用途和语法。...是一个逻辑运算符,其左侧操作数为空或未定义返回其右侧操作数,否则返回其左侧操作数。这在您想要回退到默认值的情况下非常有用。 22、什么是映射类型,以及如何在 TypeScript使用它们?...24、TypeScript 中方法重载和函数重载有什么区别? 答案:TypeScript 支持函数重载,即为单个函数声明多个函数类型。然后,编译器将根据函数调用的参数使用适当的类型。...答:TypeScript 的类型推断是指编译器在没有显式类型注释的情况下自动推断和分配类型的能力。虽然鼓励显式类型,但编译器会尽可能使用上下文(变量初始化、返回语句等)来推断类型。

62030

TypeScript 演化史 — 第八章】字面量类型扩展 和 无类型导入

扩展字面量类型 使用 const 关键字声明局部变量并使用字面量值初始化它TypeScript推断该变量的字面量类型: const stringLiteral = "https"; // Type...现在来看看非扩展字面量类型,名所示,它们不会自动地扩展。...以前,编译器过于严格,导入一个没有附带类型定义的模块,会出现一个错误: image.png 从 TypeScript 2.1 开始,如果模块没有类型声明,编译器将不再报错。...使用TypeScript 2.1,TypeScript 不是仅仅选择any类型,而是基于你后面的赋值来推断类型。 仅设置了--noImplicitAny编译参数,才会启用此选项。...编译器可以类型检查所有的使用,并在自动完成列表建议可用的成员: image.png 与类继承进行对比,有个区别:一个类只能有一个基类。

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

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

类型被允许 你可以随意调用泛型参数,当你使用简单的泛型,泛型常用 T、U、V 表示。...它自然被分配的一些例子: 一个从来不会有返回值的函数:如果函数内含有 while(true) {}); 一个总是会抛出错误的函数:function foo() { throw new Error...一个函数没有返回值,它返回了一个 void 类型,但是,一个函数根本就没有返回值(或者总是抛出错误),它返回了一个 never,void 指可以被赋值的类型(在 strictNullChecking...为 false ),但是 never 不能赋值给其他任何类型,除了 never TypeScript 索引签名 JavaScript 在一个对象类型的索引签名上会隐式调用 toString 方法..., number.... foo[obj] = 'World'; // FIX: TypeScript 强制你必须明确这么做: foo[obj.toString()] = 'World'; 声明一个索引签名

1.9K30

何在 TypeScript使用函数

如果我们调用函数的值的类型与函数预期的类型不同,TypeScript 编译器 (tsc) 会给我们错误 2345。...在本节,我们将学习如何创建函数类型,它们是表示特定函数签名的类型。在将函数传递给其他函数,创建与特定函数匹配的类型特别有用,例如,具有本身就是函数的参数。这是创建接受回调的函数的常见模式。...使用类型化异步函数使用 JavaScript 使用异步函数是比较常见的。TypeScript 有一种特定的方法来处理这个问题。在本节,我们将在 TypeScript 创建异步函数。...这些守卫在条件代码块强制执行某些类型,其中值的类型可能会根据情况而有所不同。这些在使用 Array.prototype.filter 函数返回过滤的数据数组特别有用。...使用调用时,布尔构造函数返回 true 或 false,具体取决于此值是 Truthy 还是 Falsy 值。

15K10

TypeScript 之 More on Functions

然而上一节讲到的函数类型表达式并不能支持声明属性,如果我们想描述一个带有属性的函数,我们可以在一个对象类型写一个调用签名(call signature)。...构造签名 (Construct Signatures) JavaScript 函数也可以使用 new 操作符调用调用的时候,TypeScript 会认为这是一个构造函数(constructors)...(Inference) 注意在上面的例子,我们没有明确指定 Type 的类型,类型是被 TypeScript 自动推断出来的。...console.log(arr.slice(0)); 声明类型参数 (Specifying Type Arguments) TypeScript 通常能自动推断泛型调用传入的类型参数,但也并不能总是推断出...基于上下文的类型推导(Contextual Typing)推导出返回类型为 void 的时候,并不会强制函数一定不能返回内容。

2K20

typescript4.2新特性

2021年2月23日,微软发布了typescript4.2版本,我们来看一下有哪些新的特性 更加智能的保留类型别名 TypeScript可以使用type定义一个类型,用来标识某个变量的类型,并且可以自动推断出赋值后新变量的类型...: 另外,如果使用InstanceType也会报同样的错: 这就是为什么TypeScript 4.2允许您在构造函数签名上指定抽象修饰符。...--explainFiles了解您的项目结构 使用以下指令TypeScript编译器将给出一些非常长的输出,关于import信息。...tsc --explainFiles | code - 改进逻辑表达式的未调用函数检查 TypeScript的未调用函数检查现在适用于&&和||表达式。...在4.2版本后,TypeScript设置了限制器以避免执行所有工作。 .d.ts扩展 不能在导入路径中使用TypeScript 4.2,导入路径包含.d.ts现在是错误的。

87210

TypeScript 演化史 — 第二章】基于控制流的类型分析 和 只读属性

因此,对 join 方法的调用将正确地检查类型。 在 TypeScript 2.0 之前,编译器无法推断出上面的语义。...严格的 Null 检查 与可空类型一起使用时,基于控制流的类型分析尤其有用,可空类型使用包括 null 或undefined 在联合类型的表示。...在严格的 null 检查模式下,undefined 的类型会自动添加到可选属性的联合类型,因此我们不必显式将其写出。 明确赋值分析 基于控制流的另一个新特性是明确赋值分析。...也就是说,它是类型系统的另一个特性,通过让编译器TypeScript 代码库检查意外的属性分配,帮助你编写正确的代码。...也就是说,它是类型系统的另一个特性,通过让编译器TypeScript 代码库检查意外的属性分配,帮助你编写正确的代码。

2K10

TS 从 0 到 1 - 泛型进阶

但这个函数并不是可以扩展或通用的。 虽然可以使用 any 解决通用性问题,但那就失去了定义应该返回那种类型的能力,并且也使编译器失去了类型保护的作用。...# 泛型使用时机 函数、接口或类将处理多种数据类型(为了通用) 函数、接口或类在多个地方使用该数据类型(为了一致) # 泛型约束 泛型约束用于限制每个类型变量接受的类型数量。...# 泛型参数默认类型 可以为泛型的类型参数指定默认类型,使用泛型没有在代码中直接指定参数类型参数,从实际值参数无法推断出类型,这个默认类型就会起作用。...在 TypeScript ,可以使用 new 关键字来描述一个构造函数: interface Point { new (x: number, y: number): Point; } new...) # 构造函数类型 构造函数类型: 包含一个或多个构造签名的对象类型 可以使用构造函数类型字面量或包含构造签名的对象类型字面量来编写 构造函数类型字面量的形式: new

70220

细数这些年被困扰过的 TS 问题

getPlugin(config.pluginRef); }; // 省略其他内容 return cls; }; } 通过观察 Plugin 工厂函数的方法签名,我们可以知道调用函数之后会返回...因此以上的代码可以直接在 TypeScript使用,但 TypeScript 编译器开启 noImplicitAny 的配置项,以上代码会提示以下错误信息: Parameter 'x' implicitly...TypeScript 编译器处理函数重载,它会查找重载列表,尝试使用第一个重载定义。...另外,对于纯字符串枚举,我们不能省略任何初始化程序。而数字枚举如果没有显式设置值,则会使用默认值进行初始化。...TypeScript 可访问性修饰符( public 或 private); 私有字段不能在包含的类之外访问,甚至不能被检测到。

15K73

TypeScript 4.4 RC版来了,正式版将于月底发布

类型检查器会使用“控制流分析”机制推断每个语言构造的类型,这就省去了在使用时对 TypeScript 变量类型做出声明的麻烦。... TypeScript 发现我们在测试某个常量值,它会执行一些额外的操作以查看其中是否包含类型守卫。...在完成列表显示自动导入的真实路径 在 Visual Studio Code 等编辑器显示完成列表,具有自动导入的完成结果会在显示包含对于特定模块的路径。...间接调用导入函数以提升合规性 在其他早期版本,从 CommonJS、AMD 以及其他非 ES 模块系统处执行的导入调用操作会设置所调用函数的 this 值。...所以,我们才决定在 TypeScript 4.4 的导入函数调用丢弃掉 this 值。 // 假设这是我们导入的模块,它有一个名为'foo'的导出。

2.5K20

TypeScript 4.0 RC发布,带来诸多更新

function tail(arg) { const [_, ...result] = arg; return result } 我们如何在 TypeScript 为它们类型化?... arr2 有一个参数再加一些。...https://github.com/microsoft/TypeScript/pull/38234 构造器的类属性推断 启用 noImplicitAny TypeScript 4.0 现在可以使用控制流分析来确定类属性的类型...TypeScript 4.0 在转换常见模式可以利用可选链和空值合并的优势! 我们认为这种重构应该能捕获大多数用例的意图,尤其是 TypeScript 对你的类型有更精确的了解。...当你尝试自动导入刚刚安装但尚未使用的内容,这些都会导致糟糕的体验。 TypeScript 4.0 现在可以包含你在 package.json 的 dependencies 字段列出的包。

2.7K20

TypeScript 4.0正式发布!现在是开始使用它的最佳时机

然后,你可以使用 TypeScript 编译器从代码剥离类型,并为你提供可在任何地方运行的简洁易读的 JavaScript 代码。...在 3.4 版本,我们进一步支持函数式模式,更好地支持不可变数据结构,并改进了对高阶泛型函数推断。...https://github.com/microsoft/TypeScript/pull/38234 构造器的类属性推断 启用 noImplicitAny TypeScript 4.0 现在可以使用控制流分析来确定类属性的类型...当你尝试自动导入刚刚安装但尚未使用的内容,这些都会导致糟糕的体验。...当你的 package.json 列出了超过十项尚未导入的类型化依赖项,这个功能会自动禁用,以避免缓慢的项目加载过程。要强制开启它或完全禁用它,你可以配置编辑器。

2.4K10

在 Vue 中使用 TypeScript 的一些思考(实践)

特别是当你使用 Vue.extend() ,为了让 TypeScript 正确推断类型,你将不得不做一些额外的处理。接下来,我们来聊一聊它们的细节差异。...使用 JavaScript ,这并没有什么不对的地方,但当你使用 TypeScript ,这有点不足,我们并不能得到有关于 someProp 更多有用的信息(比如它含有某些属性),甚至在 TypeScript...(value: T): boolean; } 复制代码 可知 Prop type 可以以两种不同方式出现: 含有一个调用签名的范型 type,该签名返回 T; 一个范型构造函数签名,该函数创建指定类型... type 类型为 String 构造函数,它的调用签名返回为 string: // lib.es5.d.ts interface StringConstructor { new(value?...当你使用 Vue.extends() ,这有点困难,它并不能推断出 mixins 里的类型: // ExampleMixin.vue export default Vue.extend({ data

3.2K30

TypeScript手记(六)

如下面的例子: let x = 3 变量 x 的类型被推断为数字。这种推断发生在初始化变量和成员,设置默认参数值和决定函数返回值。 大多数情况下,类型推断是直截了当地。...后面的小节,我们会浏览类型推断的细微差别。 最佳通用类型 有些时候我们需要从几个表达式推断类型,会使用这些表达式的类型来推断出一个最合适的通用类型。...每当使用一些变量调用 isFish TypeScript 会将变量缩减为那个具体的类型。...,因为编译器无法去除嵌套函数的 null(除非是立即调用函数表达式)。...但是 TypeScript 的学习不能仅仅靠看官网文档,你还需要动手实践,在实践你才能真正掌握 TypeScript

1K10

深入学习下 TypeScript 的泛型

开发人员使他们的组件成为通用组件,他们使该组件能够接受和强制使用组件传入的类型,这提高了代码灵活性,使组件可重用并消除重复。...这显示在以下屏幕截图中: 了解如何在 TypeScript 创建泛型后,您现在可以继续探索在特定情况下使用泛型。本教程将首先介绍如何在函数使用泛型。...如果仔细查看您的函数,您会发现参数列表或 TypeScript 能够推断其值的任何其他地方都没有使用泛型。这意味着调用代码在调用您的函数必须显式传递此泛型的类型。...注意:使用 await 异步处理函数的结果,返回类型将是 Promise T 的类型,在本例是通用类型 ResultType。...在类型声明本身内部,您正在检查类型 T 是否扩展了与函数签名匹配的类型,该函数签名接受可变数量的参数(包括零),然后您推断返回 该函数的类型创建一个新类型 U,可在条件的真实分支内使用

38.9K30

何在TypeScript使用基本类型

要在 macOS 或 Ubuntu 18.04 上安装,请按照如何在 macOS 上安装 Node.js 和创建本地开发环境或如何在 Ubuntu 18.04 上安装 Node.js 的使用 PPA 安装部分的步骤进行操作...类型是我们直接在代码编写的额外信息。TypeScript 编译器使用这些额外信息来强制正确使用不同的值,具体取决于它们的类型。...这对于库函数库作者很有用,这些函数可以从用户那里接受广泛的值并且不想显式地键入值。...使用未知类型的值执行任何操作TypeScript 需要确保类型是它所期望的类型。这样做的一个例子是使用 JavaScript 已经存在的 typeof 运算符。...当我们这样做TypeScript强制我们的变量类型在 if 块内编号,因为在运行时 if 块内的代码只有在代码当前设置为数字才会被执行。

3.7K10

React实战精讲(React_TSAPI)

在正常的 TypeScript ,不需要使用这种变通方法。...调用的方法 prevProps:组件更新前的props prevState:组件更新前的state ❝在React v16.3,在创建和更新,只能是由父组件引发才会调用这个函数,在React v16.4...,而useMemo的第二个参数是一个「数组」,通过这个数组来判定是否执行回调函数一个父组件调用了一个子组件的时候,父组件的 state 发生变化,会导致父组件更新,而子组件虽然没有发生改变,但也会进行更新...,用于注册一个回调函数,「存储值发生更改时被调用」。...调用 render ,「里面的任何现有 DOM 元素都会被替换」。后面的调用使用 React 的 DOM diffing 算法进行有效更新。

10.3K30

TypeScript 5.0 正式发布!

const 类型参数 推断一个对象的类型TypeScript通常会选择一个通用类型。...allowArbitraryExtensions 在 TypeScript 5.0 导入路径以不是已知 JavaScript 或 TypeScript 文件扩展名的扩展名结尾编译器将以 {file...不过,涉及到模块互操作,这确实有一些影响。在此标志下,设置或文件扩展名暗示不同的模块系统,ECMAScript 导入和导出不会被重写为 require 调用。相反,会得到一个错误。...重载提供了一种方式,用不同的参数调用一个函数,并返回不同的结果。它可以限制调用者实际使用函数的方式,并优化将返回的结果。...还是 JavaScript 文件编写,TypeScript 都可以让我们知道是否错误地调用函数

3.8K70
领券