【】ts 是 js 的超集,包含 js 的所有元素

【】ts 通过对代码进行类型检查,可以帮助我们避免在编写 js 时经常遇到令人痛苦的错误

【】强大的类型系统,包括泛型

【】支持静态类型及类型检查

【】面向对象的语言,提供所有标准的 OOP 功能,如类、接口和模块

【】ts 代码可以按照ES5和ES6标准编译,以支持最新的浏览器

2、TS 中的类型有哪些

【】number、string、boolean、void、null、undefined、enum、any、class、interface、array、tuple(元组)、object、never

3、命名空间与模块的理解

【】命名空间:解决重名问题,命名空间定义了标识符的可见范围,一个标识符可在命名空间中定义,它在不同命名空间中的含义是互不相干的

【】任何包含顶级 import 或者 export 的文件都被当成一个模块。如果一个文件不带有顶级的 import 或者 export 声明,那么它的内容被视为全局可见的

【】区别:

  • 命名空间是位于全局命名空间下的一个普通的带有名字的 JavaScript 对象,使用起来十分容易。但就像其它的全局命名空间污染一样,它很难去识别组件之间的依赖关系,尤其是在大型的应用中
  • 像命名空间一样,模块可以包含代码和声明。 不同的是模块可以声明它的依赖
  • 在正常的TS项目开发过程中并不建议用命名空间,但通常在通过 d.ts 文件标记 js 库类型的时候使用命名空间,主要作用是给编译器编写代码的时候参考使用
4、什么是枚举

【】枚举是 TypeScipt 数据类型,它允许我们定义一组命名常量。它是相关值的集合,可以是数字值或字符串值

【】枚举类型分为:数字枚举、字符串枚举、异构枚举

【】枚举是可以合并的

5、什么是装饰器

【】装饰器是一种特殊类型的声明,它能过被附加到类声明,方法,属性或者参数上,可以修改类的行为

【】通俗的来说就是一个方法,可以注入到类,方法,属性参数上来扩展类,属性,方法,参数的功能

【】装饰器的分类: 类装饰器、属性装饰器、方法装饰器、参数装饰器

6、TS 中的类是什么

【】类表示一组相关对象的共享行为和属性

【】类之间可以通过 extend 实现继承,被继承类称为基类,继承的类称为派生类

【】一个类包括构造器、属性、方法。拥有四个特性:继承、封装、多态、抽象

7、TS 中的泛型是什么

【】 在 ts 中,定义函数,接口或者类的时候,不预先定义好具体的类型,而在使用的时候在指定类型的一种特性

【】泛型约束:<T extends xx> 的方式实现 约束泛型


typescript declare type 初始化 typescript declare作用_javascript


【】索引类型 keyof T 把传入的对象的属性类型取出生成一个联合类型


typescript declare type 初始化 typescript declare作用_前端_02


8、const 和 readonly 的区别是什么

【】const用于变量,readonly用于属性

【】const在运行时检查,readonly在编译时检查

【】使用const变量保存的数组,可以使用push,pop等方法。但是如果使用Readonly Array声明的数组不能使用push,pop等方法

9、Omit 类型 和 Pick 类型对比

【】Omit 以一个类型为基础支持剔除某些属性,然后返回一个新类型

Omit<Type, Keys>

【】Pick 以一个类型为基础支持选择某些属性,然后返回一个新类型

interface Todo {
	  title: string
	  description: string
	  completed: boolean
	  createdAt: number
	}
	type Ex = "title" | "description"
	type TodoPreview = Omit<Todo, "description">
	type TodoPreview1 = Pick<Todo, Ex>
10、ts 中高级类型有哪些

【】交叉类型、联合类型、类型别名、类型索引、类型约束、映射类型、条件类型

【】映射类型:通过 in 关键字做类型的映射,遍历已有接口的 key 或者是遍历联合类型

type Readonly<T> = {
		//P in keyof T 等同于 p in 'a' | 'b',相当于执行了一次 forEach 的逻辑,遍历 'a' | 'b'
	    readonly [P in keyof T]: T[P];
	};
	
	interface Obj {
	  a: string
	  b: string
	}
	
	type ReadOnlyObj = Readonly<Obj>

【】条件类型:条件类型的语法规则和三元表达式一致,经常用于一些类型不确定的情况

//如果 T 是 U 的子集,就是类型 X,否则为类型 Y
	T extends U ? X : Y
11、interface 和 type 区别

【】相同点:

  • 都可以描述对象或者函数
  • 都允许扩展(extends)

【】不同点:

  • 类型别名可以为任何类型引入名称,例如基本类型,联合类型等
  • 类型别名不支持继承
  • 类型别名不会创建一个类型的名字
  • 类型别名无法被实现implements,而接口可以被派生类实现
  • 类型别名重名会抛出错误,接口重名是会产生合并
12、interface给 Function/Array/Class 做声明
interface Say {
	    (name: string): void;
	}
	let say: Say = (name: string): void => {};
	
	interface NumberArray {
	    [index: number]: number;
	}
	let fibonacci: NumberArray = [1, 2, 3, 4];
	
	interface Person {
	    name: string;
	    sayHi(name: string): string;
	}
13、获取枚举类型的 key
enum Str {
	    A, B, C
	}
	type strUnion = keyof typeof str; // 'A' | 'B' | 'C'
14、declare, declare global是什么

【】declare是用来定义全局变量、全局函数、全局命名空间、js modules、class等

【】declare global 为全局对象 window 增加的新属性

declare global {
	    interface Window {
	        csrf: string;
	    }
	}