目录[隐藏][展示]
- 1. TypeScript 到底是什么,它与 JavaScript 有什么不同?
- 2. TypeScript 有哪些显着特点?
- 3. 使用 TypeScript 有什么好处?
- 4. 使用 TypeScript 有哪些缺点?
- 5. TypeScript 的组件到底是什么?
- 6. 你能解释一下 TypeScript 中的接口吗?
- 7. TypeScript 中的变量是什么,它们是如何以各种方式声明的?
- 8. 如何使用接口的子集生成新类型?
- 9. “任何”类型是什么意思,我应该什么时候使用它们?
- 10. TypeScript 是怎样一种具有可选静态类型语法的语言?
- 11. 在 TypeScript 中,模块是什么意思?
- 12. “枚举”在 TypeScript 中如何发挥作用?
- 13. 内部模块与外部模块有什么区别?
- 14. TypeScript 的匿名函数是什么意思?
- 15. 在 TypeScript 中,什么是命名空间,如何声明?
- 16. TypeScript 支持哪些访问修饰符?
- 17. TypeScript 允许函数重载吗?
- 18. TypeScript 如何在函数中允许可选参数?
- 19. var、let 和 const 有何不同?
- 20. 在 TypeScript 中,描述装饰器?
- 21. 在 TypeScript 中,Mixins 是什么意思?
- 22. TypeScript 中的类型别名到底是什么?
- 23. 术语“范围变量”是什么意思?
- 24. noImplicitAny 到底是做什么用的?
- 25. 并集和交集类型有何不同?
- 26. 如何定义 TypeScript Declare Keyword?
- 27. 在 TypeScript 中,什么是泛型?
- 28. JSX 在 TypeScript 中是什么意思?
- 29. 什么是 TypeScript Ambients,我应该什么时候使用它们?
- 30. TypeScript 中的抽象类是什么意思?
- 31. TypeScript Map 文件到底是什么?
- 32. 在 TypeScript 中,什么是类型断言?
- 结论
Microsoft 开发并继续支持 TypeScript 编程语言。 通过添加静态类型作为选项,它是 JavaScript 的语法超集。
大型应用程序开发语言 TypeScript 编译 JavaScript。 由于 TypeScript 是 JavaScript 的超集,因此用 JavaScript 编写的程序在 TypeScript 中也有效。
以下是最典型的 TypeScript 开发人员面试问题和回答的完整列表,以防你参加。
1. TypeScript 到底是什么,它与 JavaScript 有什么不同?
作为 JavaScript 的超集,TypeScript 可编译为标准 JavaScript。 从概念的角度来看,TypeScript 和 JavaScript 类似于 SASS 和 CSS。
换句话说,TypeScript 是具有更多功能的 ES6 JavaScript。 JavaScript 是一种更类似于 Python 的脚本语言,而 TypeScript 是一种面向对象的静态类型语言,可与 Java 和 C# 相媲美。
类和接口都是 TypeScript 面向对象设计的一部分,由于其静态类型,类型推断是众多可用工具之一。
JavaScript 编写在扩展名为 .js 的文件中,而 TypeScript 编写在扩展名为 .ts 的文件中。
与 JavaScript 不同,TypeScript 代码不能直接在浏览器或任何其他平台上运行,也不能被浏览器理解。 然后,目标平台将运行使用 TypeScript 的转译器从 .ts 文件生成的纯 JavaScript。
2. TypeScript 有哪些显着特点?
- 静态类型是 TypeScript 的一项功能,可在编译期间帮助进行类型检查。 因此,即使不执行脚本,您也可以在编写代码时检测代码中的错误。
- 可以使用 TypeScript 更改 DOM 以添加或删除项目。
- 任何操作系统,包括 Windows、macOS 和 Linux,都可以安装 TypeScript 编译器。
- 类、接口和模块是 TypeScript 提供的一些功能。 因此,它可以为客户端和服务器端开发创建面向对象的代码。
- ECMAScript 2015(ES 6、7)的大部分特性已经包含在 TypeScript 中,包括类、接口、箭头函数等。
- 如果你使用 JavaScript 的动态类型,TypeScript 还支持可选的静态类型。
3. 使用 TypeScript 有什么好处?
- 任何 JavaScript 引擎或浏览器都可以执行 TypeScript,因为它快速、易学且运行迅速。
- 它与 JavaScript 共享相同的语法和语义。
- 这有助于后端开发人员更快地编写前端代码。
- 它结合了 ES6 和 ES7 功能,可以 JavaScript 中的函数 ES5 引擎,例如 Node.js。
- 通过定义文件支持现有的 JavaScript 库,如 Jquery、D3.js 等,该文件具有 .d.ts 扩展名。
- 已经存在的 JavaScript 脚本可以调用 TypeScript 代码。 它还与当前的 JavaScript 框架和库无缝集成。
4. 使用 TypeScript 有哪些缺点?
- 使用 TypeScript 编码需要一个漫长的编译过程。
- 它不支持抽象类。
- 类型定义文件的质量是一个问题。
- 任何第三方库都必须有定义文件才能使用。
- 如果我们想在浏览器中运行 TypeScript 应用程序,则需要一个编译步骤来将 TypeScript 转换为 JavaScript。
- JavaScript 已经被 Web 开发人员使用了很多年,TypeScript 并没有提供任何新的东西。
5. TypeScript 的组件到底是什么?
在 TypeScript 中,组件主要分为三类,包括:
- 语言:它包括类型、关键字和语法的注释。
- 打字稿编译器:TypeScript 指令由这个编译器 (tsc) 翻译成 JavaScript。
- TypeScript 语言服务:语言服务提供类似编辑器的应用程序,作为基本编译器过程之上的第二层。 语言服务支持标准的通用编辑操作集。
6. 你能解释一下 TypeScript 中的接口吗?
TypeScript 使用接口来指定实体的语法。 换句话说,可以使用接口来描述对象或项目数组等数据形式。 interface 关键字、接口名称及其定义用于声明接口。 让我们检查一个用户对象的基本界面。
然后可以使用接口设置变量的类型(类似于将原始类型分配给变量的方式)。 然后,用户类型的变量将满足接口的属性。
您的 TypeScript 项目受益于接口,因为它们提供了一致性。 此外,接口通过增强 IDE 自动完成功能并保证为构造函数和方法提供正确的值来增强项目的工具。
7. TypeScript 中的变量是什么,它们是如何以各种方式声明的?
变量是专门指定的内存区域,用于保存值。 在 TypeScript 中声明变量时,冒号 (:) 放在变量名之后,后跟类型。 我们使用 var 关键字声明变量,就像在 JavaScript 中一样。
在 Typescript 中声明变量时必须遵守某些准则:
- 名称不能以数字开头。
- 变量名必须包含字母或数字。
- 美元符号 ($) 和下划线 (_) 是此字段中唯一允许的特殊字符。
8. 如何使用接口的子集生成新类型?
通过提供现有类型或接口并选择要从新类型中排除的键,您可以使用实用程序 type omit 在 TypeScript 中创建新类型。
下面的示例演示了如何构造一个名为 UserPreview 的新类型,该类型基于用户界面但不包括电子邮件属性。
9. “任何”类型是什么意思,我应该什么时候使用它们?
有时您需要将值保存在变量中,但您事先不确定变量的类型。 例如,该值可能源自用户输入或 API 请求。 您可以使用“any”类型为变量类型赋予任何类型的值。
当变量的类型没有明确指定并且编译器无法从上下文中确定它时,TypeScript 认为该变量的类型是 any。
10. TypeScript 是怎样一种具有可选静态类型语法的语言?
可以指示编译器忽略 TypeScript 中变量的类型,因为它是可选的静态类型。 任何数据类型都可用于为变量分配任何类型的值。 编译时,TypeScript 不会提供任何错误检查。
11. 在 TypeScript 中,模块是什么意思?
使用模块将相关变量、函数、类、接口等组合在一起是有效的。 它可以使用,但不能在全局范围内使用,只能在自己的范围内使用。
本质上,模块定义的变量、函数、类和接口不能直接从模块外部访问。
export 关键字可用于构建模块,而 import 关键字可用于将模块包含在另一个模块中。
12. “枚举”在 TypeScript 中如何发挥作用?
定义命名常量集合的一种方法是使用枚举或枚举类型。 这些数据结构具有固定长度和固定值的集合。
在 TypeScript 中表示给定值的替代集合时,枚举经常用于描述使用一组键/值对的可能性。
让我们看一个用于提供各种用户类型的枚举的图示。
枚举在编译后由 TypeScript 在内部转换为常规 JavaScript 对象。 因此,使用枚举优于使用几个单独的 const 变量。
由于枚举提供的分组,您的代码是类型安全的并且更容易理解。
13. 内部模块与外部模块有什么区别?
内部模块:
- 内部模块是 Typescript 先前迭代的一个特性。
- 内部模块的名称和主体是使用 ModuleDeclarations 定义的。
- 这些是本地或导出的其他模块的成员。
- 类、接口、函数和变量在内部模块中组合在一起,可以导出到另一个模块中。
外部模块:
- 在最新版本中,外部模块被称为模块。
- 一个称为外部模块的单独源文件用于创建它们,每个源文件至少有一个导入或导出声明。
- 在最新版本中,外部模块被称为模块。
- 模块定义的内部语句可以使用外部模块隐藏,只留下连接到定义变量的方法和参数可见。
14. TypeScript 的匿名函数是什么意思?
归类为匿名的函数缺少函数名作为标识符。 这些例程是在运行时动态定义的。 与常规函数一样,匿名函数可以接受输入并产生结果。
匿名函数通常在创建后就无法访问。 变量可以分配给匿名函数。
15. 在 TypeScript 中,什么是命名空间,如何声明?
命名空间在逻辑上对功能进行分组。 这些在内部保留了打字稿遗留代码。 它包含具有特定联系的特征和事物。
命名空间的另一个名称是内部模块。 接口、类、函数和变量都可以包含在命名空间中,以提供连接功能的集合。
16. TypeScript 支持哪些访问修饰符?
以下是 TypeScript 中的 public、private 和 protected 访问修饰符如何用于控制类成员的可访问性的示例:
- 公共 – 类的每个成员、其所有后代类以及类的每个实例都可以访问。
- 受保护的——类的每个成员及其所有子类都可以访问它们。 但是,类实例无法访问。
- 对它们的私人访问仅限于班级成员。
由于 JavaScript 很方便,如果没有给出访问修饰符,则假定它是公共的。
17. TypeScript 允许函数重载吗?
是的,TypeScript 支持函数重载。 但现在它正在完成是奇怪的。 因此,当使用 TypeScript 重载时,只有一个实现具有多种签名。
第二个签名包含一个 text 类型的参数,而第一个签名只有一个 number 类型的参数。 第三个函数,它包含任何类型的参数,包含实际的实现。
然后,实现确定所提供参数的类型并根据该确定运行单独的代码段。
18. TypeScript 如何在函数中允许可选参数?
与 JavaScript 相反,如果您尝试调用函数而未指定函数签名中所述的参数的精确数量和种类,TypeScript 编译器将引发错误。
您可以通过使用问号符号 ('?') 来利用可选参数来解决此问题。 它表明可以通过添加“?”来表示可选参数对于那些可能会或可能不会收到价值的人。
19. var、let 和 const 有何不同?
TypeScript 提供了三种不同的声明变量的方法,每种方法都有一个建议的应用程序。
VAR: 使用 JavaScript 的 var 变量的行为和范围准则声明一个全局或函数范围的变量。 变量在声明时不需要设置它们的值。
让: 声明一个局部范围的块变量。 让变量在声明时不需要设置变量的值。 术语“块范围的局部变量”是指只能从包含它的块内部访问的变量,例如函数、if/else 块或循环。 与 var 相比,让变量在声明之前不能被读取或写入。
常量: 声明一个块范围常量的值,该值在初始化后不能更改。 const 变量需要在声明之前进行初始化。 对于在整个存在期间保持不变的变量,这是最优的。
20. 在 TypeScript 中,描述装饰器?
访问器、属性、参数、类、函数或装饰器都可以以特定方式声明为装饰器。 装饰器是带有 @expression 前缀的函数,它将在运行时调用,并带有有关装饰声明的详细信息。
表达式必须评估函数才能使装饰器工作。
TypeScript 装饰器提供了以声明方式向当前代码添加注释和信息的目标。
在我们的 tsconfig.json 文件或命令行中,您必须激活 ExperimentDecorators 编译器选项才能启用对装饰器的实验性支持:
21. 在 TypeScript 中,Mixins 是什么意思?
Mixins 是一种从 Javascript 中的可重用部分创建类并混合部分类以创建更复杂的完整类的技术。
这个概念很简单:函数 B 接受类 A 并返回一个添加了其功能的新类,而不是类 A 扩展类 B 以获得其功能。 在这种情况下,函数 B 是一个 mixin。
22. TypeScript 中的类型别名到底是什么?
类型别名更改类型的名称。 类型别名,如接口,可用于命名原语、联合、元组和任何其他必须手动定义的类型。
别名不会创建新类型; 相反,它会更改现有类型的名称。 给原语起别名实际上并不实用,尽管它可能对文档有益。
类型别名,如接口,可以是通用的; 您所要做的就是添加类型参数并在别名声明的右侧使用它们。
23. 术语“范围变量”是什么意思?
JavaScript 支持本地和全局范围变量。 作用域是对象、变量和函数的集合。
在两个范围内声明变量的示例是:
- 具有局部作用域的变量——它作为函数对象在函数中使用。
- 具有全局范围的变量——这个窗口对象可以在函数内部和外部使用
24. noImplicitAny 到底是做什么用的?
TypeScript 编译器对项目的隐式 any 类型的处理由 TypeScript 项目的 tsconfig.json 配置文件中的 noImplicitAny 属性更改。
noImplicitAny 标志可以设置为 true 或 false,并且在初始化后始终可以更改。 鉴于每个项目都是独一无二的,这个数字应该是多少没有正确或错误的答案。
了解标志的开和关状态之间的区别可以帮助您选择要用于标志的设置。
如果 noImplicitAny 标志设置为 false(默认值),编译器不会根据变量的使用方式来确定变量的类型。 编译器默认将类型设置为 any。
但是,如果 noImplicitAny 选项设置为 true,编译器将努力推断类型,如果无法推断,则会引发编译时错误。
25. 并集和交集类型有何不同?
联合和交集类型不是从头开始生成新类型,而是允许您组合和混合现有类型。 联合和交集都具有独特的品质,使其非常适合某些用例。
可以是多种类型之一的类型称为联合类型。 将在新类型中使用的类型列表使用 | 划分。 (竖线)联合类型中的符号。
让我们看一个插图:
另一方面,交集被定义为将许多类型合并为一个类型,将每种类型的所有特征集成为一个新类型。 将合并的种类列表使用 & 符号划分为交集。
让我们看一个插图:
26. 如何定义 TypeScript Declare Keyword?
JavaScript 库或框架中没有 TypeScript 声明文件。 但是,您必须使用 declare 关键字才能在 TypeScript 文件中使用它们而不会遇到任何编译错误。
当您希望指定一个可能已经存在于其他地方的变量时,您可以在环境声明和方法中使用 declare 关键字。
27. 在 TypeScript 中,什么是泛型?
一个名为 TypeScript Generics 的工具提供了一种生产可重用部件的方法。 它不仅可以处理一种形式的数据,还可以开发可以处理多种数据类型的组件。
此外,它在不牺牲效率或生产力的情况下提供类型安全性。 借助泛型,我们可以构建泛型类、泛型函数、泛型方法和泛型接口。
泛型是高度类型化的集合,因为类型参数写在开 () 和闭 (>) 括号之间。 它使用了一种独特的类型变量,称为 T,它代表类型。
28. JSX 在 TypeScript 中是什么意思?
JSX 是一种合法的 JavaScript,可以从可嵌入的类似 XML 的语法转换而来。 与 React 框架一起,JSX 获得了普及。
TypeScript 支持将 JSX 直接编译、类型验证和嵌入到 JavaScript 中。 如果你想使用它,你必须给你的文件一个.tsx 扩展名并激活 JSX 选项。
29. 什么是 TypeScript Ambients,我应该什么时候使用它们?
编译器通过环境声明获知位于别处的真实源代码。
如果我们尝试在运行时使用这些源代码但它们不存在,它将在没有任何事先通知的情况下中断。 类文档文件是环境声明文件。
如果源更改,则必须更新文档,如果环境声明文件未更改,则会导致编译器问题。
此外,它使我们能够利用已经广泛使用的知名 JavaScript 库,例如 jQuery、AngularJS、NodeJS 等。
30. TypeScript 中的抽象类是什么意思?
抽象类定义对象的契约,但不允许直接对象实例化。 但是,抽象类也可以提供其成员的实现信息。
一个或多个抽象成员可以在一个抽象类中找到。 然后,超类的抽象成员必须具有由扩展抽象类的任何类提供的实现。
让我们看一下抽象类的 TypeScript 示例以及不同的类如何扩展它。 尽管下面示例中的 Car 和 Bike 类都扩展了 Vehicle 类,但它们都以独特的方式实现了 drive() 函数。
31. TypeScript Map 文件到底是什么?
称为 TypeScript Map 文件的源映射文件包含有关我们原始文件的数据。 源映射文件或 .map 文件允许工具在输出的 JavaScript 代码和生成它的 TypeScript 源文件之间进行映射。
此外,这些文件可以被调试器使用,允许我们调试 TypeScript 文件而不是 JavaScript 文件。
32. 在 TypeScript 中,什么是类型断言?
虽然类型断言的功能类似于 C# 和 Java 等其他语言中的类型转换,但它不执行类型验证或数据重新排列。
虽然类型断言对运行时没有影响,但类型转换提供了这种支持。 另一方面,类型断言仅由编译器使用,并为我们希望如何检查代码提供指导。
结论
总之,我们希望这些 TypeScript 面试问题对你有所帮助,无论你是准备面试的开发人员,还是试图寻找最佳应聘者的招聘经理。
请记住,招聘过程不仅仅涉及技术专长。 为了确保您找到(或找到合适的申请人)这份工作,过去的经验和软技能同样重要。
许多 TypeScript 面试问题都是开放式的,没有一个正确的答案,所以请记住这一点。
面试官对你的回答背后的理由很感兴趣。
随时准备好接受后续询问,说明您是如何得出答案的。 描述你的思考过程。
发表评论