一 我要涨知识 —— TypeScript 常见面试题( 二 )


TS对JS的改进主要是静态类型检查,静态类型检查有何意义?标准答案是“静态类型更有利于构建大型应用” 。
推荐使用TypeScript的原因有:

  • TypeScript简化了JavaScript代码,使其更易于阅读和调试 。
  • TypeScript是开源的 。
  • TypeScript为JavaScript ide和实践(如静态检查)提供了高效的开发工具 。
  • TypeScript使代码更易于阅读和理解 。
  • 使用TypeScript,我们可以大大改进普通的JavaScript 。
  • TypeScript为我们提供了ES6(ECMAScript 6)的所有优点 , 以及更高的生产率 。
  • TypeScript通过对代码进行类型检查,可以帮助我们避免在编写JavaScript时经常遇到的令人痛苦的错误 。
  • 强大的类型系统,包括泛型 。
  • TypeScript只不过是带有一些附加功能的JavaScript 。
  • TypeScript代码可以按照ES5和ES6标准编译 , 以支持最新的浏览器 。
  • 与ECMAScript对齐以实现兼容性 。
  • 以JavaScript开始和结束 。
  • 支持静态类型 。
  • TypeScript将节省开发人员的时间 。
  • TypeScript是ES3、ES5和ES6的超集 。
4、TypeScript 的内置数据类型有哪些?数字类型:用于表示数字类型的值 。TypeScript 中的所有数字都存储为浮点值 。
let identifier: number = value;布尔类型:一个逻辑二进制开关 , 包含true或false
let identifier: string = " ";Null 类型: Null 表示值未定义的变量 。
let identifier: bool = Boolean value;未定义类型:一个未定义的字面量,它是所有变量的起点 。
let num: number = null;void 类型:分配给没有返回值的方法的类型 。
let unusable: void = undefined;5、TypeScript 中的变量以及如何声明?变量是内存中用于存储值的命名空间 。
在 TypeScript 中声明变量的类型语法在变量名称后包括一个冒号(:),后跟其类型 。与 JavaScript 相似,我们使用var关键字声明变量 。
在Typescript中声明变量时,必须遵循某些规则:
  • 变量名称必须是字母或数字 。
  • 不能以数字开头名称 。
  • 除下划线( _ )和美元( $ )符号外,它不能包含空格和特殊字符 。
6、TypeScript 中的泛型是什么?TypeScript Generics 是提供创建可重用组件的方法的工具 。它能够创建可以使用多种数据类型而不是单一数据类型的组件 。而且,它在不影响性能或生产率的情况下提供了类型安全性 。泛型允许我们创建泛型类,泛型函数,泛型方法和泛型接口 。
在泛型中 , 类型参数写在左括号(<)和右括号(>)之间,这使它成为强类型集合 。它使用一种特殊的类型变量来表示类型 。
function identity < T > (arg: T) : T {return arg;}let output1 = identity < string > ("edureka");let output2 = identity < number > (117);console.log(output1);console.log(output2);7、TypeScript 中 interface 和 type 的差别是什么?7.1、相同点
  • 都可以描述一个对象或者函数
interface User {name: string age: number}interface SetUser { (name: string, age: number) : void;}type User = {name: string age: number};type SetUser = (name: string, age: number) = >void;
  • 都允许拓展(extends)
interface 和 type 都可以拓展 , 并且两者并不是相互独立的,也就是说 interface 可以 extends type, type 也可以 extends interface。虽然效果差不多,但是两者语法不同 。
// 1、interface extends interfaceinterface Name {name: string;}interface User extends Name {age: number;}// 2、type extends typetype Name = {name: string;}type User = Name & { age: number};// 3、interface extends typetype Name = {name: string;}interface User extends Name {age: number;}// 4、type extends interfaceinterface Name {name: string;}type User = Name & {age: number;}7.2、不同点
  • type 可以而 interface 不行
type 可以声明基本类型别名,联合类型,元组等类型
// 基本类型别名type Name = string// 联合类型interface Dog {wong();}interface Cat {miao();}type Pet = Dog | Cat// 具体定义数组每个位置的类型type PetList = [Dog, Pet]type 语句中还可以使用 typeof 获取实例的 类型进行赋值
// 当你想获取一个变量的类型时,使用 typeoflet div = document.createElement('div');type B = typeof div其他骚操作
type StringOrNumber = string | number;type Text = string | { text: string };type NameLookup = Dictionary<string, Person>;type Callback<T> = (data: T) => void;type Pair<T> = [T, T];type Coordinates = Pair<number>;type Tree<T> = T | { left: Tree<T>, right: Tree<T> };