interface 和 type 的区别

  • type可以声明 基本类型,联合类型,元组 的别名,interface不行
  • type 语句中可以使用 typeof 获取类型实例
  • type 支持类型映射,interface不支持
  • interface能够声明合并,type不能

typescript中对抽象类和interface的理解


ts如何对早期库比如jquery如何补充类型


ts中的可选和必选


动态runtime注入的类型怎样做才能静态不报错


说说Typescript的优缺点?

  • 优点.
    1. 快速简单,易于学习。
    2. 编译时提供错误检查, 在代码运行前就会进行错误提示。
    3. 支持所有的JS库。
    4. 支持ES6,提供了ES6所有优点和更高的生产力。
    5. 使用继承提供可重用性。
    6. 有助于代码结构。
    7. 通过定义模块来定义命名空间。
  • 缺点:
    1. 需要长时间的来编译代码。
    2. 在使用第三方库时,需要有三方库的定义文件,并不是所有三方库都提供了定义文件,提供的定义文件是否准确也值得商榷。

如何理解Typescript中的类?并说说它有什么特性?

  • Typescript是一种面向对象的Javascript语言,和其他任何面向对象编程的强语言一样,类是描述某一组对象共有属性状态或行为的实体。它就是构建具体对象实例的模板和蓝图。
  • 特性:继承、多态、抽象、封装、实例

Typescript支持哪些面向对象术语?

类、继承、多态、抽象、泛化、接口封装、实例化

如何调用基类中的构造函数?

super()

如何实现类的继承?

extends

Typescript中的模块是什么?

  • 内部模块都称为命名空间,外部模块简称模块。
  • 模块在自身的作用域里执行,并不是全局作用域。这就意味着模块类的类、函数、对象等对外都是不可见的。除非你通过export导出,import导入。
  • 模块通过使用模块加载器导入另一个模块。在运行时,模块加载器负责在执行模块之前定位和执行模块的所有依赖项。JavaScript中最常用的模块加载器是用于Node.js的CommonJS模块加载器和用于Web应用程序的require.js模块加载器。

解释下Typescript的装饰器是什么?

  • 装饰器是一种特殊类型的声明,它能被附加在类、方法、属性、访问符、参数上。
  • 装饰器使用@expression这种方式,expression求值后必须为一个函数,它在运行时调用,被装饰器声明的信息作为参数传入。

什么是Mixins?

  • 一种通过重用组件构建类的方法。
  • 不通过类的直接继承来实现,而是将基类作为接口来实现。对于基类实例化部分在子类中实现,基类中原型的部分在子类中进行声明占位,然后通过一个Minxin函数将基类上的原型属性拷贝到子类上。

TSD是什么?(什么是TypeScript定义管理器?为什么我们需要它?)

  • TSD是Typescript的包管理工具,我们都知道在.ts文件中引入第三方库时,第三库是需要.d.ts声明文件的,否则三方库在.ts中是无法识别报错的。
  • TSD就是帮我查找对应的三方库TS声明文件并下载安装。

Declare关键字是干嘛用的?

  • 我们在.ts中使用的第三方库时没有.d.ts声明文件的时候,我们可以通过declare来写申明文件。
  • 可以声明该模块,甚至可以直接声明一个值为any的同名的变量,然后我们就可以在代码中直接使用该三方库了。

tsconfig.json文件有什么作用?

  • 该文件存在于Typescript项目的根目录里,其作用是指定相关选项告诉ts编译器如何编译ts文件。

说说什么Typescript中的泛型?作用是什么?

  • 泛型代表的是泛指某一类型,由尖括号包裹
  • 主要作用是创建逻辑可复用的组件。
  • 泛型可以作用在函数、类、接口上。

说说你对多态的理解

  • 定义:父类定义一个方法不去实现,让继承他的子类去实现,每一个子类有不同的表现。
  • 多态属于继承

什么是Typescript映射文件?

  • .map源映射文件
  • 它是编译后的.js与源文件之间的映射文件。调试器使用该文件,使我们可以直接调试Typescript文件而不是编译后的JS文件。

什么是类型断言?

  • 类型断言对运行没有什么影响,仅供编译器使用。
  • 向编译器提供我们所希望的分析代码的提示。
  • 表示断言的两种方式:
    1. <类型>变量
    2. 变量 as 类型 (在tsx中只能使用这种方式)

什么是Rest参数?

  • 在不使用arguments对象的情况允许我们的函数传递可变数量的参数的另一种实现方式。
  • 表示方式是…params。
  • rest参数的规则是:
    1. 一个函数只能有一个rest参数。
    2. 它只能出现在参数列表的最后一个。
    3. 该参数必须是数组类型。

什么是枚举?

  • 枚举可以使我们定义一些带名字的常量,用于清晰的表达意图和创建一组有区别的用例。
  • 枚举主要分为两类。一类是基于数字的,有自增长和反向映射的特性。一类是基于字符串的。
  • 当然还有混合了这两种基础类型的枚举,我们叫做异构枚举。

什么是声明合并?

  • 声明合并是编译器将2个或多个同名声明合并为一个,合并后的声明拥有被合并声明的所有特性。
  • 目前除了类不能与其他类和变量合并外,其他声明都是可以相互合并的。

TypeScript和JavaScript有什么不同?

ts面试题

是否可以将多个.ts文件合并成一个.js文件?如果是,那么如何做?

需要添加——outFILE [OutputJSFileName]编译选项。

tsc --outFile comman.js file1.ts file2.ts file3.ts

能否自动编译.ts文件,并实时修改.ts文件?

通过使用——watch compiler选项来实现

tsc --watch file1.ts

内部模块和外部模块有什么区别?

ts面试题2

Typescript中的名称空间是什么?如何在Typescript中声明名称空间?

  • 名称空间是用于对功能进行逻辑分组的一种方式。名称空间用于在内部维护typescript的遗留代码。它封装了共享某些关系的特性和对象。名称空间也称为内部模块。名称空间还可以包括接口、类、函数和变量,以支持一组相关功能。
  • 注意: 名称空间可以在多个文件中定义,并允许将每个文件都定义在一个地方。它使代码更容易维护。

解释TypeScript的Enum枚举类型?

  • 枚举或枚举是一种数据类型,允许我们定义一组命名常量。使用枚举可以更容易地记录意图,或者创建一组不同的案例。它是相关值的集合,可以是数值或字符串值。

什么是匿名函数?

  • 匿名函数是声明时没有任何命名标识符的函数。这些函数是在运行时动态声明的。与标准函数一样,匿名函数可以接受输入和返回输出。匿名函数在初始创建之后通常是不可访问的。

TypeScript中的方法重写是什么?

  • 如果子类(子类)具有与父类中声明的相同的方法,则称为方法覆盖。换句话说,在派生类或子类中重新定义基类方法。
  • 方法重写的规则
    • 该方法必须具有与父类相同的名称
    • 该方法必须具有与父类相同的参数。
    • 必须有一个IS-A关系(继承)。

TypeScript中的类型。

  • 内置(原始数据类型):包括数字(number),字符串(string),布尔值(boolean),无效(void),空值(null)和未定义(undefined)。
  • 用户定义的:它包括枚举(enums),类(classes),接口(interfaces),数组(arrays)和元组(tuple)。

TypeScript支持的访问修饰符

  • TypeScript支持访问修饰符 public,private 和 protected,它们决定了类成员的可访问性。
    • 公共(Public),类的所有成员,其子类以及该类的实例都可以访问。
    • 受保护(Projected),该类及其子类的所有成员都可以访问它们。 但是该类的实例无法访问。
    • 私有(Private),只有类的成员可以访问它们。
  • 如果未指定访问修饰符,则它是隐式公共的,因为它符合 JavaScript 的便利性。

TypeScript是一种可选的静态类型语言吗?

typeScript是可选的静态类型,这意味着您可以要求编译器忽略变量的类型。 使用任何数据类型,我们都可以为变量分配任何类型的值。 TypeScript在编译期间不会进行任何错误检查。

TypeScript支持方法重载吗?

支持

js有函数重载,为什么没有


什么是作用域变量?

  • 作用域是一组对象,变量和函数,JavaScript有全局作用域变量和局部作用域变量。
  • 您可以在两个不同的作用域内声明变量,例如:
    • 局部作用域变量,它是在函数内使用的函数对象;
    • 全局作用域变量,您可以在函数外和函数内使用此窗口对象;

readonly 和 const 有什么区别?

  1. const定义时即初始化,运行期间无法再初始化;readonly除了在定义时可以初始化外,还能在运行期间的构造函数中初始化,实例只读变量只能在实例构造函数中初始化,静态只读变量只能在静态构造函数中初始化
  2. const定义的变量只能通过类名称访问,而readonly会根据其是否定义为静态类型而分别通过对象与类名称访问
  3. const只能定义值类型与字串,若定义引用类型则初始化值必须为null,而readonly无此限制,可以定义引用类型时初始化为null,在对应的构造函数中再重新初始化

never 和 void 的区别

  • void 表示没有任何类型(可以被赋值为 null 和 undefined)。
  • never 表示一个不包含值的类型,即表示永远不存在的值。
  • 拥有 void 返回值类型的函数能正常运行。
  • 拥有 never 返回值类型的函数无法正常返回,无法终止,或会抛出异常。

实例化是什么?

  • 一般情况下,创建一个类后并不能直接的对属性和方法进行引用,必须对类进行实例化,即创建一个对象。TypeScript中用new 关键字创建对象。实例化后通过“.”来访问属性和方法

什么是构造函数,构造函数作用是什么?

  • 构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。而TypeScript的构造函数用关键字constructor来实现。可以通过this(和java/C#一样代表对象实例的成员访问)关键字来访问当前类体中的属性和方法。

namespace 和 module 有什么区别

  • 內部模組 - namespace 模組之间是相近的功能,使用namespace集中功能。 外部模組 - module 模組之间是不同功能,两个模块之间的关系是通过在文件级别上使用imports和exports建立的。 区别:namespace是跨文件的,JS里的module是以文件为单位一个文件一个module

静态方法和静态属性有什么区别


静态方法能不能使用 this ?为什么


any 和 unknown的区别


ts的类和js的类的区别