interface 和 type 的区别
- type可以声明 基本类型,联合类型,元组 的别名,interface不行
- type 语句中可以使用 typeof 获取类型实例
- type 支持类型映射,interface不支持
- interface能够声明合并,type不能
typescript中对抽象类和interface的理解
ts如何对早期库比如jquery如何补充类型
ts中的可选和必选
动态runtime注入的类型怎样做才能静态不报错
说说Typescript的优缺点?
- 优点.
- 快速简单,易于学习。
- 编译时提供错误检查, 在代码运行前就会进行错误提示。
- 支持所有的JS库。
- 支持ES6,提供了ES6所有优点和更高的生产力。
- 使用继承提供可重用性。
- 有助于代码结构。
- 通过定义模块来定义命名空间。
- 缺点:
- 需要长时间的来编译代码。
- 在使用第三方库时,需要有三方库的定义文件,并不是所有三方库都提供了定义文件,提供的定义文件是否准确也值得商榷。
如何理解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文件。
什么是类型断言?
- 类型断言对运行没有什么影响,仅供编译器使用。
- 向编译器提供我们所希望的分析代码的提示。
- 表示断言的两种方式:
- <类型>变量
- 变量 as 类型 (在tsx中只能使用这种方式)
什么是Rest参数?
- 在不使用arguments对象的情况允许我们的函数传递可变数量的参数的另一种实现方式。
- 表示方式是…params。
- rest参数的规则是:
- 一个函数只能有一个rest参数。
- 它只能出现在参数列表的最后一个。
- 该参数必须是数组类型。
什么是枚举?
- 枚举可以使我们定义一些带名字的常量,用于清晰的表达意图和创建一组有区别的用例。
- 枚举主要分为两类。一类是基于数字的,有自增长和反向映射的特性。一类是基于字符串的。
- 当然还有混合了这两种基础类型的枚举,我们叫做异构枚举。
什么是声明合并?
- 声明合并是编译器将2个或多个同名声明合并为一个,合并后的声明拥有被合并声明的所有特性。
- 目前除了类不能与其他类和变量合并外,其他声明都是可以相互合并的。
TypeScript和JavaScript有什么不同?
是否可以将多个.ts文件合并成一个.js文件?如果是,那么如何做?
需要添加——outFILE [OutputJSFileName]编译选项。
tsc --outFile comman.js file1.ts file2.ts file3.ts |
能否自动编译.ts文件,并实时修改.ts文件?
通过使用——watch compiler选项来实现
tsc --watch file1.ts |
内部模块和外部模块有什么区别?
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 有什么区别?
- const定义时即初始化,运行期间无法再初始化;readonly除了在定义时可以初始化外,还能在运行期间的构造函数中初始化,实例只读变量只能在实例构造函数中初始化,静态只读变量只能在静态构造函数中初始化
- const定义的变量只能通过类名称访问,而readonly会根据其是否定义为静态类型而分别通过对象与类名称访问
- 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