常见typescript面试题

本文详细介绍了TypeScript(TS)的基本概念,如其作为JS的超集、支持的特性如类和接口、以及主要类型如any、never、unknown等。文章还涵盖了TS的关键语法如const和readonly、this的使用、模块加载机制、类型断言和JSX等,并讨论了TS的兼容性和相关工具如装饰器和mixin。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 什么是TS?

TS是强类型的JS超集,支持ES6语法,支持面向对象编程的概念,如类、接口、继承、泛型等。

TS并不直接在浏览器上运行,需要编译器编译成JS来运行。

2. TS的主要特点

  • 跨平台:可以安装在任何OS上
  • ES6特性
  • 是面向对象的语言,提供标准OOP功能
  • 使用静态类型并帮助在编译时就进行类型检查
  • 允许可选的静态类型
  • 可以操作DOM来增删客户端网页元素

3. any、never、unknown、null & undefined、void有什么区别?

any:动态的变量类型(失去类型检查的作用)

never:永不存在的值的类型。例如:never类型是那些总是会抛出异常 或 根本不会有返回值的函数表达式

unknown:任何类型的值都能赋给unknown类型,但unknown类型的值只能赋给unknown本身 和 any类型

null&undefined:默认下它们是所有类型的子类型

void:没有任何类型。例如:一个函数没有返回值,就可以把返回值定义为null

4. any和unknown的区别

unknown更严格,在对unknown类型的值执行大多数操作之前,必须进行某种形式的检查。

而对any执行操作之前,不必做任何检查。


在编程阶段还不清除类型的变量,比如来自用户输入 或 第三方代码库,我们又不希望类型检查器对这些值进行检查而直接通过编译阶段的检查,这时就可以用any。

5. 如何将unknown指定为一个具体的类型

  • 使用
### TypeScript 面试常见问题及答案 #### 1. TypeScript 的基本概念 TypeScript 是一种由微软开发的开源编程语言,它是 JavaScript 的超集,添加了可选的静态类型和基于类的面向对象编程。TypeScript 最终会被编译成纯 JavaScript 代码[^1]。 #### 2. 类型声明与类型推断的区别 类型声明是显式地为变量或函数指定类型,而类型推断是 TypeScript 根据赋值语句右侧的值自动推断变量的类型。例如: ```typescript // 类型声明 let x: number; x = 10; // 类型推断 let y = 20; // TypeScript会自动推断y的类型为number ``` 通过类型声明,开发者可以更明确地定义变量的类型,从而提高代码的可读性和安全性[^1]。 #### 3. 接口(Interface)的作用及使用场景 接口在 TypeScript 中用于定义对象的结构,包括属性和方法的名称、类型以及它们之间的关系。接口的主要作用是为类提供一个模板或者契约,确保类按照特定的方式实现。 接口的使用场景包括但不限于以下几种: - 定义对象的形状。 - 描述函数的参数和返回值。 - 作为类型检查器的参考,确保数据符合预期格式。 接口与类型别名(Type Alias)的区别在于: - 接口可以被扩展和重新打开以添加新的成员。 - 类型别名不能被扩展,但可以用来创建联合类型或元组类型[^1]。 #### 4. 类型断言的作用及注意事项 类型断言允许开发者手动指定一个值的类型。例如: ```typescript let someValue: any = "this is a string"; let strLength: number = (someValue as string).length; ``` 需要注意的是,类型断言不会进行实际的类型检查,如果断言不正确,在运行时可能会导致错误[^3]。 #### 5. 模块的概念及其优势 TypeScript 模块提供了一种通过将代码封装到不同文件中来组织和重用代码的方法。模块可以导出和导入到其他文件中,从而更容易跨多个文件和项目重用代码。模块还有助于避免命名冲突并提高代码的可服务性和可扩展性[^4]。 #### 6. 全局类型声明的引入方式 `/// <reference types/>` 可用于引入一些全局的类型声明。例如,在 Web 项目中,可能需要引入 `@types/webpack-env` 来获取 `window`、`document` 等全局对象的类型声明。在项目的相关文件中添加 `/// <reference types="webpack-env" />`,就可以确保在代码中使用这些全局对象时,能够获得准确的类型检查[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值