面试题 - TypeScript

610 阅读2分钟

最近找工作整理了一些面试题,分享给大家一起来学习。如有问题,欢迎指正。

前端面试题系列文章:

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 = {stuNonumber} | {classIdnumber}
    
    
  • type可以声明 元组类型

    type Data = [numberstring];
    
  • interface重复声明会合并,type会报错

    interface Person { namestring }
    interface Person { agenumber }
    let userPerson = {
        name"Tolu",
        age0,
    };
    
    
    type Person { namestring }; 
    
    // Error: 标识符“Person”重复。ts(2300)
    type Person { agenumber }
    
  • 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)