typeScript面试题

1、什么是ts

TypeScript 是一种由 Microsoft 开发的开源编程语言,它是 JavaScript 的一个超集,添加了静态类型检查和一些其他的语言特性。
TypeScript 在编译时会将代码转换为纯 JavaScript,因此它可以在任何支持 JavaScript 的环境中运行,如浏览器和 Node.js。TypeScript 的核心是静态类型系统,接口(Interfaces),类(Classes),泛型(Generics),模块(Modules)

2、为什么需要使用ts

1、TypeScript 使代码更容易阅读和理解:函数的用法,需要传什么值,返回值是什么类型一目了然,对大型项目的维护性有很大的提升;
2、TypeScript在编写代码时就对代码进行类型检查,避免js在运行时报错时我们再去排查问题,可以提高代码质量、减少错误
3、ts代码的开发工具支持性好,使用ts有代码提示,自动补全等功能,提高开发效率
4、TypeScript支持类、接口、继承、模块化开发可以将代码分成多个模块,提高代码的可读性和可维护性

3、ts和js的区别

①js是一门弱语言,解释型语言。ts是一门强语言,编程语言。
②js在运行时报错,ts在编译代码时就会报错提示。
③JS不支持类和接口,而TS支持类和接口。

4、ts有什么特点

1、静态类型检查:TypeScript 使用静态类型并帮助在编译时进行类型检查。因此,你可以在编写代码时发现编译时错误,而无需运行脚本。
2、跨平台:TypeScript 编译器可以安装在任何操作系统上,包括 Windows、macOS 和 Linux。
3、ES6 特性:TypeScript 包含计划中的 ECMAScript 2015 (ES6) 的大部分特性,例如箭头函数。
4、面向对象的语言:TypeScript 提供所有标准的 OOP 功能,如类、接口和模块。

5、模块和命名空间有什么区别

1、模块是TypeScript的外部模块,主要用于代码的组织和复用。命名空间是TypeScript的内部模块,主要用于将相关逻辑代码组织在一起并避免命名冲突。
2、模块使用export关键字来公开模块功能,命名空间使用namespace关键字创建一个命名空间,并使用export公开;
模块主要用于代码的组织和复用,而命名空间则主要用于组织代码并避免命名冲突。

namespace SomeNameSpaceName {
   export interface ISomeInterfaceName {      }  
   export class SomeClassName {      }  
}
SomeNameSpaceName.SomeClassName

6、ts支持访问的修饰符有哪些?

公共(public),类的所有成员,其子类以及该类的实例都可以访问。
受保护(protected),该类及其子类的所有成员都可以访问它们。 但是该类的实例无法访问。
私有(private),只有类的成员可以访问它们,子类和实例不能访问;

7、TypeScript中的Declare关键字有什么作用?

当我们在ts项目中引入了一些第三方js库,引入后TypeScript 编译器仍会提示相应的错误信息。因为没有声明,ts编译器不认识这个变量
我们需要在 .d.ts 文件中声明,如 declare var wx:any;相当于声明了一个叫wx的全局变量;
在ts项目中引入其他模块,例如css、less等,TypeScript编译器将无法识别上述的这些模块,就会提示相应的错误信息。
所以我们需要 declare module ‘*.css’
声明全局变量,如果没有声明在其他地方引用回报错;

8、解释一下TypeScript中的枚举

我们可以使用枚举去定义一组常量的集合;通俗来说,枚举就是一个对象的所有可能取值的集合,它们可以增加代码的可读性

enum Gender {
  Male,
  Female,
  Other,
  Up = 'Up',
  No = 0,

9、ts的模块是什么

TypeScript 中的模块是一个程序包,包内的成员(函数、变量、类型)仅仅在包内可见,如果在模块外可见需要通过export暴露,再通过import引入

module module_name{
  class xyz{
    export sum(x, y){
      return x+y;
    }

10、ts内置的数据类型有哪些

  1. 布尔类型(boolean):表示 true 或 false。
  2. 数字类型(number):表示数值,可以是整数或浮点数。
  3. 字符串类型(string):表示文本。
  4. 数组类型(array):表示多个值的有序集合。
  5. 元组类型(tuple):表示已知元素数量和类型的数组。
  6. 枚举类型(enum):表示一组命名的常量。
  7. 任意类型(any):表示任意类型的值。
  8. 空类型(void):表示没有任何返回值的函数。
  9. null 和 undefined 类型:表示 null 或 undefined 值。
  10. 对象类型(object):表示非原始类型的值。
  11. never 类型:表示永远不会有返回值的函数的返回类型。

11、ts数据类型和js数据类型的区别

1、在JavaScript没有类型注解的概念,它使用typeof运算符来检查变量的类型。TypeScript在定义变量时直接添加类型注释即可
2、JavaScript通常使用对象字面量或构造函数来创建和描述对象,它没有内置的接口或类型别名支持。而TypeScript引入了接口(Interfaces)和类型别名(Type Aliases)等概念,用于定义复杂的数据结构和对象类型。
3、JavaScript没有内置的可选类型和默认值概念,开发者通常通过条件语句和赋值语句来处理可选参数和默认值。TypeScript支持可选类型(Optional Types)和默认值(Default Values)
4、JavaScript没有内置的类型推断功能,TypeScript具有强大的类型推断功能,可以根据变量的使用情况和上下文自动推断变量的类型。

10、什么是类型断言

类型断言指的是我们告诉编译器我们断定某个变量的具体类型并相信我们的断言;使用类型断言只是影响编译阶段的类型,不影响实际运行时的类型;
常见用途有两种:
1、在联合类型中断言为其中一个类型
2、访问某个不确定类型的对象的属性或方法

使用语法:<类型>值 或 值 as 类型

let strValue = 'this is a string type';
let strLength = (<string>strValue).length;
使用as
let strValue: any = 'this is string type';let strLength: number = (strValue as string).length;

11、TS中any和unknown有什么区别?

1、any类型表示任何类型,指定为any后ts不会对其类型检查;
2、unknown 表示不确定,设置为unknown后ts会要求我们进行类型断言和类型保护;
unknown 类型比 any 类型更安全,因为它强制你明确处理类型的不确定性。any 类型应该谨慎使用,因为它会绕过类型检查,可能导致运行时错误。

12、TypeScript中never和void的区别?

void 表示没有任何类型(但是可以被赋值为 null 和 undefined)。我们一般不会声明某个值的类型为void,因为它表示这个值只能是undefined或者null
never 表示一个不包含值的类型,即表示永远不存在的值。通常用在函数包含了无限循环或抛出错误中;
拥有 void 返回值类型的函数能正常运行。拥有 never 返回值类型的函数无法正常返回,无法终止,或会抛出异常。

13、tsconfig.json有什么作用?

tsconfig.json文件是JSON格式的文件。
在tsconfig.json文件中,可以指定不同的选项来告诉编译器如何编译当前项目。
目录中包含tsconfig.json文件,表明该目录是TypeScript项目的根目录。

14、ts中的继承?

继承是一种从另一个类获取一个类的属性和行为的机制。
继承可以通过使用extend关键字来实现。

15、什么是泛型?

泛型可以理解为宽泛的类型,通常用于类和函数,就是我们在创建时不知道数据类型,在new的时候才把具体类型传入。使用类型参数的方式增加代码的灵活性和复用性;我们通常将类型参数用单个的大写字母来代替,如
泛型是静态类型语言的基本特征,允许将类型作为参数传递给另一个类型、函数、或者其他结构。TypeScript 支持泛型作为将类型安全引入组件的一种方式。这些组件接受参数和返回值,其类型将是不确定的,直到它在代码中被使用。

function identity<T>(arg: T): T { 
  return arg; 例如<T, K, Z>
}

16、type和interface的区别

interface接口用来约束对象的结构,定义对象的属性和方法的数据类型;
共同点:
1、都可以定义对象和函数
2、都可以继承
区别:
1、类型别名 type可以用来给一个类型起新名字,不仅可以表示基本类型,还可以表示对象类型、联合类型、元组和交集;而Interface(接口)用于描述对象的形状和结构,仅限于描述对象类型。
2、Type 和 Interface 都可以实现继承,但实现形式略有不同。Type通过交叉类型(&)实现继承,而 Interface 通过 extends 关键字实现继承;
3、Interface 可以重复声明,并且会进行声明合并,例如两个同名的 Interface 声明会被合并成一个;Type 在重复声明时会报错

type userName = string; // 基本类型
type userId = string | number; // 联合类型
type arr = number[];  
// 对象类型
type Person = {
    id: userId; // 可以使用定义类型
    name: userName;
    age: number;
    gender: string;
    isWebDev: boolean;
};
// 范型
type Tree<T> = { value: T };
const user: Person = {
    id: "901",
    name: "椿",
    age: 22,
    gender: "女",
    isWebDev: false,
};
const numbers: arr = [1, 8, 9];

17、 const和readonly的区别

const 是定义常量,一般赋值后不可修改,引用类型可修改;而readonly 是设置对象的只读属性;
1、const 字段只能在该字段的声明中初始化, readonly 字段可以在声明或构造函数中初始化
2、const是编译时常量,在编译时确定该值;readonly是运行时常量,在运行时确定该值

18、滥用any的后果

使用any类型相当于放弃了对该值的静态类型检查,使得代码在编译阶段不会对这些值进行类型检查。
1.代码可读性下降
2.潜在的运行时错误
3.类型安全受损

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值