📅  最后修改于: 2023-12-03 15:36:57.856000             🧑  作者: Mango
TypeScript 是下一代 JavaScript,它是一种由微软开发的静态类型检查器,基于 JavaScript 语言之上。下面是50个常见的 TypeScript 面试问题。
TypeScript 提供了静态类型检查,并且它增强了代码的可读性和可维护性。此外,它还支持类和模块,使得编写大规模应用程序变得更加容易。
TypeScript是一种由Microsoft开发的开源编程语言,它是 JavaScript 的超集,而且它支持静态类型、类、模块、接口和更好的 IDE 支持等功能。
“类型”是指在编程语言中表示值的属性。在 TypeScript 中,类型可以是基本类型、对象类型、数组类型、函数类型等。
TypeScript 中的基本数据类型包括:boolean、number、string、null、undefined、any 和 void。
TypeScript 中的类型判断有如下几种方式:
在 TypeScript 中,可以使用 let、const 和 var 来定义变量。其中 let 和 const 是 ES6 引入的新方式,var 是旧的方式。
TypeScript 中可以使用的存储器有 getter 和 setter。getter 用于获取属性值,setter 用于设置属性值。
在 TypeScript 中,可以使用如下代码来判断一个变量是否为 null 或 undefined:
if (value === null || value === undefined) {
// Code here
}
接口是一种规范,它定义了对象的成员、方法、属性等。在 TypeScript 中,接口可以被对象、类、数组等实现。
在 TypeScript 中,箭头函数的语法是:
(param1: type, param2: type) => returnValue;
TypeScript 中的类支持继承、多态和访问控制等特性。与 JavaScript 相比,它更加符合面向对象编程的规范。
在 TypeScript 中,可以使用如下语法定义一个类:
class MyClass {
// Properties and methods here
}
TypeScript 中的修饰符包括 public、private 和 protected 等。
在 TypeScript 中,可以使用 extends 关键字来实现继承,如下所示:
class ChildClass extends ParentClass {
// Properties and methods here
}
在 TypeScript 中,可以使用抽象类和抽象方法来实现多态。
在 TypeScript 中,可以使用如下语法定义一个接口:
interface MyInterface {
// Properties and methods here
}
泛型是指在编程语言中定义变量、函数、类等时,不指定其类型,而是通过传参时动态决定所使用的数据类型。
枚举是一种特殊的数据类型,它由一组有名字的常量组成。
在 TypeScript 中,可以使用如下语法定义一个枚举:
enum MyEnum {
Value1,
Value2,
Value3,
}
在 TypeScript 中,可以使用 import 和 export 关键字来使用和导出模块。
命名空间是一种组织代码的方式,它将一组相关的功能放在一个命名空间中。
在 TypeScript 中,可以使用如下语法定义一个命名空间:
namespace MyNamespace {
// Properties and methods here
}
装饰器是一种特殊的函数,它可以为类、属性、方法等添加元数据。
在 TypeScript 中,可以使用如下语法定义一个装饰器:
@decorator
class MyClass {
// Properties and methods here
}
前置条件验证是指在函数或方法执行前对参数进行验证。
在 TypeScript 中,可以使用如下方式实现前置条件验证:
function myFunction(param1: any): void {
if (param1 === undefined || param1 === null) {
// Throw an error
}
// Code here
}
在 TypeScript 中,可以使用 try...catch...finally 语句块来处理异常。
在 TypeScript 中,可以使用反引号来定义模板字符串,如下所示:
const name = 'John';
const message = `Hello, ${name}!`;
在 TypeScript 中,可以使用如下语法定义一个泛型类:
class MyClass<T> {
// Properties and methods here
}
在 TypeScript 中,可以使用如下语法定义一个泛型接口:
interface MyInterface<T> {
// Properties and methods here
}
类型推断是指编译器自动根据代码的上下文推测变量的类型。
在 TypeScript 中,可以使用如下方式避免使用 any 类型:
非空断言操作符(!)可以忽略类型检查器的警告,标记一个变量或属性一定不是空值。
在 TypeScript 中,可以使用如下语法使用“非空断言操作符”:
const strLength = str!.length;
可选链操作符(?.)是一种新的语法,可以安全地访问可能不存在的对象或属性。
在 TypeScript 中,可以使用如下语法使用“可选链操作符”:
const x = obj?.prop?.value;
空值合并操作符(??)可以为变量设置一个默认值,防止变量的值为空时出错。
在 TypeScript 中,可以使用如下语法使用“空值合并操作符”:
const myVariable = myNullableVariable ?? myDefaultValue;
在 TypeScript 中,可以使用如下语法定义一个类型别名:
type MyCustomType = {
// Properties and methods here
}
条件类型是指在 TypeScript 中,根据某个条件返回不同的类型。
在 TypeScript 中,可以使用如下语法定义一个条件类型:
type MyConditionalType<T> = T extends string ? true : false;
在 TypeScript 中,可以使用如下语法使用“交叉类型”:
type MyCombinedType = MyType & MyOtherType;
在 TypeScript 中,可以使用如下语法使用“联合类型”:
type MyCombinedType = MyType | MyOtherType;
在 TypeScript 中,可以使用如下语法使用“类型守卫”:
if (typeof myVariable === 'string') {
// myVariable is a string
}
可辨识联合类型是根据某个属性的值来区分不同类型的一种联合类型。
在 TypeScript 中,可以使用如下语法使用“可辨识联合类型”:
type MyCombinedType = MyType1 | MyType2 | MyType3;
interface MyType1 {
kind: 'Type1';
}
interface MyType2 {
kind: 'Type2';
}
interface MyType3 {
kind: 'Type3';
}
映射类型是指在 TypeScript 中,一种可以修改对象类型的方式。
在 TypeScript 中,可以使用如下语法定义一个“映射类型”:
type MyMappedType<T> = {
[P in keyof T]: T[P];
}
导出表达式是一种可以将模块导出的变量进行默认值导出的方式。
在 TypeScript 中,可以使用如下语法使用“导出表达式”:
export = MyModule;