最近找工作整理了一些面试题,分享给大家一起来学习。如有问题,欢迎指正。
前端面试题系列文章:
JS与 ES 与TS的关系
- JavaScript: 脚本语言,不需要编译就可以在运行环境运行。弱类型的动态类型语言
- ECMAScript: JavaScript的规范, 浏览器不能识别ES6的语法,需要babel编译生成ES5的语法才能去运行
- TypeScript: 是JavaScript的超集TypeScript兼容ES高版本的语法,最低可以编译为ES3的语法,支持任何JavaScript的运行环境。
TS数据类型
- boolean(布尔类型)
- number(数字类型)
- string(字符串类型)
- array(数组类型)
- tuple(元组类型):明确元素数量和元素类型的数组,各元素的类型不必相同
- enum(枚举类型):一个对象的所有可能取值的集合
- any(任意类型):可以指定任何类型的值
- null 和 undefined 类型:是所有类型的子类型(除了never)
- void 类型: 用于标识方法返回值的类型,表示该方法没有返回值
- never 类型: never是其他类型 (包括null和 undefined)的子类型,可以赋值给任何类型,代表从不会出现的值
- object 对象类型
interface和type的区别
-
type
可以定义基本类型别名, 但是interface
仅限于描述对象类型 -
type
可以声明联合类型type Student = {stuNo: number} | {classId: number}
-
type
可以声明 元组类型:type Data = [number, string];
-
interface
重复声明会合并,type
会报错interface Person { name: string } interface Person { age: number } let user: Person = { name: "Tolu", age: 0, }; type Person { name: string }; // Error: 标识符“Person”重复。ts(2300) type Person { age: number }
-
type
可以通过 typeof 操作符来定义type myType = typeof someObj
Interface class区别
- interface是仅存在于TS上下文中的一种虚拟结构,TS编译器依赖接口用于类型检查,最终编译为JS后,接口将会被移除。
- 与interface不同,class作为TS的一种变量类型存在于上下文之中,class中可以提供,变量、方法等的具体实现方式等
ts项目中引入了js库,怎么解决?
- @types库查找,例如:loadsh库需要安装包@types/lodash
- 或者在d.ts文件来进行类型声明
- 或者在d.ts文件 declare module ‘包名’(项目引入包的类型为any)