说说你对ts的理解?与js的区别?
查看详情
- ts是由微软开发和维护的一个开源语言,它是js的超集,增加了静态类型检查和一些其他功能,支持最新的ES6+语法
- 区别:
- 增加了类型系统
- 需要编译为js才能运行
typescript内置的数据类型有哪些?
查看详情
- 基本数据类型
- boolean
- number
- string
- 数组(数组内元素类型相同)
- 元组(元组内元素类型可以不相同)
- 访问一个已知元素会得到正确的类型
- 访问越界元素会报错(高版本)
- 枚举(默认情况下元素编号从 0 开始,可以手动指定编号)
- null
- undefined
- any
- void
- never
- unknown
- 复合类型
- 联合类型
- 交叉类型
typescript中const和readonly的区别是什么?
查看详情
- const可以防止变量的值被修改,在运行时检查,使用const变量保存的数组,可以使用push,pop等方法
- readonly可以防止变量的属性被修改,在编译时检查,使用Readonly Array声明的数组不能使用push,pop等方法
typescript中any类型的作用是什么?
查看详情
给未知类型的变量指定一个类型
interface和type的区别是什么?
查看详情
- 继承和扩展:
- interface 使用 extends 进行继承,适用于面向对象的设计模式。
- type 使用交叉类型进行扩展,适用于函数式编程风格。
- 功能和灵活性:
- interface 主要用于定义对象和类的结构。
- type 更灵活,除了对象外,还可以定义联合类型、交叉类型、元组等。
- 声明合并:
- interface 支持声明合并。
- type 不支持声明合并。
typescript中使用class定义类型与interface和type的优点是什么?
查看详情
- 在定义类型的时候可以包含具体的实现
- 可以使用一些关键字:public,private,protected
- 可以实例化
void, any, never 和unknown的区别是什么?
查看详情
- void
- 描述:void 类型表示没有任何类型。通常用于表示函数没有返回值。
- 用途:用于指定函数不返回值,或用于表示不会使用的变量。
- 特点:
- 通常在函数返回类型中使用,表示函数没有返回值。
- 不能赋值为任何值,除了 undefined 和 null(在严格模式下只能赋值为 undefined)。
- any
- 描述:any 类型表示任意类型。使用 any 后,该值可以是任意类型的数据(如字符串、数字、对象等),并且对该值的操作不会进行类型检查。
- 用途:用于逃避类型检查,使得 TypeScript 对该变量的任何操作都视为合法。
- 特点:
- 可以赋值为任意类型的值。
- 对 any 类型的变量可以进行任意操作,编译器不会报错。
- never
- 描述:never 类型表示永远不存在的值。通常用于表示那些永远不会正常完成的函数(如抛出异常或无限循环的函数)的返回类型。
- 用途:用于类型保护,表示不应该出现的情况。
- 特点:
- 表示函数永远不会返回值(例如抛出异常或无限循环)。
- 在联合类型中,用于剔除不可能的类型分支。
- unknown
- 描述:unknown 类型表示未知类型。与 any 类似,但更安全,因为在对 unknown 类型的变量进行操作之前,必须进行类型检查。
- 用途:用于表示一个值可以是任意类型,但需要在使用它之前进行类型检查。
- 特点:
- 可以赋值为任意类型的值。
- 在对 unknown 类型的变量进行操作之前,必须进行类型检查,否则编译器会报错。
typescript内置的工具类型有哪些?
解释一下typescript中的枚举类型
查看详情
枚举(Enum)是一种特殊的数据类型,用于定义一组命名常量(一个变量所有可能的取值)。这些常量可以是数字或字符串。
typescript中keyof 和 typeof 关键字的作用?
查看详情
- typeof
- 类型查询(Type Query):用于获取变量或对象的类型。
- 类型守卫(Type Guard):在运行时检查变量的类型。
- keyof 关键字用于获取某个类型的所有键,并生成一个联合类型
typescript中泛型是什么?
查看详情
泛型允许在定义函数、接口或类时,不指定具体的类型,而是在使用时再指定具体的类型。
typeScript 中使用联合类型时有哪些注意事项?
查看详情
- 进行必要的类型检查
- 未检查或断言时只能访问联合类型所有成员共有的属性和方法
typeScript 中 interface 可以给函数、数组做声明吗?
查看详情
typescript
// 函数
interface SearchFunc {
(source: string, subString: string): boolean;
}
const mySearch: SearchFunc = function (src, sub) {
return src.search(sub) > -1;
};
// 数组
interface StringArray {
[index: number]: string;
}
const myArray: StringArray = ["Bob", "Fred"];
什么是重载?
查看详情
重载:允许一个函数接受不同数量或者类型的参数,解决多个可选参数时函数的调用方式
typescript
interface IDirection {
top: number;
right: number;
bottom: number;
left: number;
}
function assigned(all: number): IDirection;
function assigned(topAndBottom: number, leftAndRight: number): IDirection;
function assigned(top: number, right: number, bottom: number, left: number): IDirection;
function assigned(a: number, b?: number, c?: number, d?: any) {
if (b === undefined && c === undefined && d === undefined) {
b = c = d = a;
} else if (c === undefined && d === undefined) {
c = a;
d = b;
}
return {
top: a,
right: b,
bottom: c,
left: d,
};
}
assigned(1);
assigned(1, 2);
assigned(1, 2, 3, 4);
// 无此类型的调用方式
// assigned(1,2,3)
// assigned(1,2,undefined,3)
TypeScript 中的类的 public、private 和 protected 修饰符作用是什么?
查看详情
- public:默认的访问修饰符,公共成员可以在任何地方访问。
- private:私有成员只能在当前类中访问,继承类和实例都不能访问。
- protected:受保护的成员可以在当前类和继承类中访问,实例不能访问。
TypeScript中的declare关键字有什么作用?
查看详情
declare关键字用于声明变量、函数、类、命名空间等的类型,而不需要提供具体的实现。这在与已有的JavaScript代码或第三方库进行集成时非常有用,因为它允许你在不改变已有代码的情况下,为它们提供类型信息。
TypeScript中命名空间与模块的理解和区别
查看详情
- 命名空间主要用于在全局范围内组织和封装代码,避免命名冲突。命名空间通过namespace关键字定义。
- 在 TypeScript 中,就像在 ECMAScript 2015 中一样,任何包含顶级import或的文件export都被视为模块
- 区别:
- 定义和引用方式不同:namespace/export和import
- 加载方式不同:模块需要加载器进行加载
tsconfig.json有什么作用?
查看详情
tsconfig.json 文件是 TypeScript 项目的配置文件,用于指定 TypeScript 编译器的配置选项。通过 tsconfig.json 文件,你可以定义哪些文件应该被编译,编译过程中的选项,以及生成的输出文件的结构和行为。
如何将unknown类型指定为一个更具体的类型?
查看详情
- 类型断言
- 类型守卫
- typeof
- instanceof
什么是TypeScript的映射文件?
查看详情
映射文件(Source Map)可以将编译后的JavaScript代码与原始的TypeScript代码对应起来。这对于调试非常有用,因为你可以在浏览器的开发者工具中查看和调试TypeScript源代码,而不是生成的JavaScript代码。映射文件通常有一个.map扩展名,并包含有关源文件的位置信息。
TypeScript中什么是装饰器,它们可以应用于什么?
查看详情
装饰器(Decorators)是 TypeScript 中的一种特殊语法,用于修改类、方法、访问器、属性或参数的行为。装饰器提供了一种将横切关注点(如日志记录、性能监控、权限控制等)与业务逻辑分离的机制,使代码更加模块化和可重用。