TypeScript(TS)面试题与重点知识总结

** 温馨提示:学过java的会更好理解一些,TypeScriprt语法与java中的类思想相似,面向对象编程。

TS介绍:

1.什么是TS与JS的区别和联系是什么?
TS:JS的超集,即对JS的扩展,主要提供了类型系统和对 ES6+ 的支持,但TS最终会转换为js代码去执行。
特点:

  • 始于 JavaScript,归于 JavaScript
  • 强大的类型系统
  • 先进的 JavaScript
    TypeScript(TS)面试题与重点知识总结_第1张图片
    区别:
TypeScript JavaScript
语言 面向对象编程语言 面向脚本编程
是否支持可选参数 支持 不支持
是否支持静态类型 支持 不支持
是否支持接口 支持 不支持

TS常用语法

定义变量的语法:let 变量名:变量类型
定于数组:
第一种,可以在元素类型后面接上[],表示由此类型元素组成的一个数组:

let list1: number[] = [1, 2, 3]

第二种方式是使用数组泛型,Array<元素类型>:

let list2: Array<number> = [1, 2, 3]
  • 基础类型:
  1. boolean
  2. number
  3. String
  4. undefined和null(默认情况下 null 和 undefined 是所有类型的子类型)
  5. 数组
  6. 元组:表示一个已知元素数量和类型的数组,各元素的类型不必相同
  7. object:表示非原始类型,也就是除 number,string,boolean之外的类型
  8. 枚举:为一组数值赋予友好的名字
  9. any:不清楚类型的变量指定一个类型
  10. void
  11. 联合类型(Union Types)(表示取值可以为多种类型中的一种)
  12. 类型断言:可以用来手动指定一个值的类型。
    语法:
    方式一: <类型>值
    方式二: 值 as 类型 tsx中只能用这种方式
  13. 类型推断:TS 会在没有明确的指定类型的时候推测出一个类型
    有下面 2 种情况: 1. 定义变量时赋值了, 推断为对应的类型. 2. 定义变量时没有赋值, 推断为 any 类型
  1. 继承:类从基类中继承了属性和方法,通过extends实现
  2. 修饰符:public(默认)、private(不能在声明它的类的外部访问)、protected(子类可以访问)
  3. 存取器:TypeScript 支持通过 getters/setters 来截取对对象成员的访问。 它能帮助你有效的控制对对象成员的访问。
  4. 静态属性:
    静态属性, 是类对象的属性
    非静态属性, 是类的实例对象的属性
  5. 抽象类:不能被实例化,用abstract修饰
  • 接口:(接口是对象的状态(属性)和行为(方法)的抽象(描述))
    核心原则之一是对值所具有的结构进行类型检查
  1. 应用
  /*
在 TypeScript 中,我们使用接口(Interfaces)来定义对象的类型
接口: 是对象的状态(属性)和行为(方法)的抽象(描述)
接口类型的对象
    多了或者少了属性是不允许的
    可选属性: ?
    只读属性: readonly
*/

/*
需求: 创建人的对象, 需要对人的属性进行一定的约束
  id是number类型, 必须有, 只读的
  name是string类型, 必须有
  age是number类型, 必须有
  sex是string类型, 可以没有
*/

// 定义人的接口
interface IPerson {
  readonly id: number
  name: string
  age: number
  sex?: string
}

const person1: IPerson = {
  id: 1,
  name: 'tom',
  age: 20,
  sex: '男'
}
  
  1. readonly VS const
    最简单判断该用 readonly 还是 const 的方法是看要把它做为变量使用还是做为一个属性。 做为变量使用的话用 const,若做为属性则使用 readonly。
  2. 类类型: 实现接口
    一个类可以实现多个接口
    一个接口可以继承多个接口
  3. 接口也可以相互继承
    #函数类型
  • 泛型:指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定具体类型的一种特性。
  • 函数
  1. 可选参数和默认参数
function buildName(firstName: string = 'A', lastName?: string): string {
if (lastName) {
  return firstName + '-' + lastName
} else {
  return firstName
}
}
  1. 剩余参数
 function info(x: string, ...args: string[]) {
  console.log(x, args)
}
  • 重载:
    函数名相同, 而形参不同的多个函数 在 JS 中, 由于弱类型的特点和形参与实参可以不匹配, 是没有函数重载这一说的 但在 TS 中, 与其它面向对象的语言(如 Java)就存在此语法

常见面试题

  • 什么是构造函数,其作用?
    构造函数式一种特殊的方法,主要用于创建对象时初始化对象,即给对象成员属性赋值。和new关键字一起使用,而TS的构造函数通过关键字constructor实现,并用this关键字来访问当前类中的属性和方法。
  • 为什么要用TS?
  1. TS在编译时就可以暴露问题,而JS则在运行时才可以发现
  2. TS作为一种强类型,明确知道数据类型,代码的可读性高,便于理解。
  • 什么是泛型
    在定义时不去指定类型,等使用时才去指定
  • 什么是实例化?
    一般创建一个类后并不能直接对属性和方法进行访问,必须对类进行实例化,需要创建一个对象。创建对象通过new关键字来实现,通过"."访问属性和方法。
  • 什么是方法重写
    子类可以直接继承父类的方法,直接使用,但有时子类并不想原封不动的继承父类中的方法,而是想做一定的修改,就是重写。重写的作用在于子类可以根据需要定义自己的特定行为,即子类能够根据需要实现父类方法。
  • 什么是可索引类型接口
    一般用来约束数组和对象
  • never和void的区别
    void表示没有任何类型,(可以赋值为null和undefined)
    never表示不包含任何值,用永远没有值
    拥有void返回值类型的函数可以正常运行,而never的则无法执行,也无法终止,会抛出异常。

你可能感兴趣的:(typescript)