导航


HTML

CSS

JavaScript

浏览器 & 网络

版本管理

框架

构建工具

TypeScript

性能优化

软实力

算法

UI、组件库

Node

冷门技能

为什么要使用 TypeScript ? TypeScript 相对于 JavaScript 的优势是什么?

增加了静态类型,可以在开发人员编写脚本时检测错误,使得代码质量更好,更健壮。

优势:

  1. 杜绝手误导致的变量名写错
  2. 类型可以一定程度上充当文档
  3. IDE自动填充,自动联想

type 和 interface 的区别

interface iMan {
  name: string;
  age: number;
}
// 接口可以进行声明合并
interface iMan {
  hobby: string;
}

type tMan = {
  name: string;
  age: number;
};
// type不能重复定义
// type tMan = {}

// 继承方式不同, 接口继承使用 extends
interface iManPlus extends iMan {
  height: string;
}
// type继承使用&,又称交叉类型
type tManPlus = { height: string } & tMan;

const aMan: iManPlus = {
  name: "aa",
  age: 15,
  height: "175cm",
  hobby: "eat",
};

const bMan: tManPlus = {
  name: "bb",
  age: 15,
  height: "150cm",
};

any、unkonwn、never 区别

TypeScript 中 any、never、unknown、null & undefined 和 void 有什么区别?

什么是 any 类型,何时使用 ?

例如,该值来自 API 调用或用户输入。any 类型 允许你将任何类型的值分配给 any 类型的变量

let person: any = "Foo";

// 以下是一个演示任何类型用法的示例

// json可能来自第三方API
const employeeData: string = `{"name": "arry老师", "salary": 60000}`;

// 解析JSON以构建employee对象
const employee: any = JSON.parse(employeeData);

console.log(employee.name);
console.log(employee.salary);

什么是 void,什么时候使用 void 类型 ?

function notify(): void {
  alert("Hello World !");
}

TypeScript 中 const 和 readonly 的区别

TypeScript 中 interface 可以给 Function / Array / Class(Indexable)做声明吗?

可以

// 函数声明
interface Say {
 (name: string): viod;
}
let say: Say = (name: string):viod => {}

// Array 声明
interface NumberArray { 
 [index: number]: number; 
} 
let fibonacci: NumberArray = [1, 1, 2, 3, 5];

// Class 声明
interface PersonalIntl {
 name: string
 sayHi (name: string): string
}

TypeScript 中使用 Union Types 时有哪些注意事项?

属性或方法访问: 当 TypeScript 不确定一个联合类型的变量到底是哪个类型的时候,我们只能访问此联合类型的所有类型里共有的属性或方法。

function getLength(something: string | number): number {
   return something.length;
}
// index.ts(2,22): error TS2339: Property 'length' does not exist on type >'string | number'.
//   Property 'length' does not exist on type 'number'.

function getString(something: string | number): string {
   return something.toString();
}
// 公共方法和属性可以访问

TypeScript 中 ?.、??、!、!.、_、 等符号的含义?**

如何使 TypeScript 项目引入并识别编译为 JavaScript 的 npm 库包?

  1. 选择安装 ts 版本,npm install @types/包名 --save
  2. 对于没有类型的 js 库,需要编写同名的.d.ts文件

对 TypeScript 类中成员的 public、private、protected、readonly 修饰符的理解?

keyof 和 typeof 关键字的作用?

TypeScript 支持静态类吗 ?为什么 ?

TypeScript 不支持静态类,

在 TypeScript 中,你可以将任何数据和函数创建为简单对象,而无需创建包含类。