TypeScript 是一种静态类型检查的编程语言,它是 JavaScript 的超集,意味着任何合法的 JavaScript 代码也是合法的 TypeScript 代码。TypeScript 添加了类型系统和其他特性,使得开发者可以在编译时发现错误,并更好地管理大型应用。下面是几个可能出现在 TypeScript 面试中的问题及解答:
1. 什么是 TypeScript?
TypeScript 是由微软开发的一种开源编程语言,它扩展了 JavaScript,增加了静态类型检查和面向对象编程的功能。
2. TypeScript 和 JavaScript 有什么区别?
- TypeScript 是 JavaScript 的超集,具有静态类型系统。
- TypeScript 支持类、接口、泛型等面向对象的概念。
- TypeScript 编写的代码会被编译成 JavaScript,然后在浏览器或 Node.js 中运行。
- TypeScript 代码在编译时进行类型检查,帮助早期发现问题。
3. 如何定义一个类型别名?
类型别名使用 type
关键字来定义:
type UserId = string;
let id: UserId = "123";
4. 如何定义一个接口?
接口(Interface)用于描述对象的形状:
interface Person {
name: string;
age?: number; // 可选属性
[propName: string]: any; // 任意属性
}
let tom: Person = { name: "Tom", age: 25 };
5. 什么是泛型?
泛型允许创建可重用的组件,这些组件可以与不同的数据类型一起工作而不牺牲类型安全性。例如:
function identity<T>(arg: T): T {
return arg;
}
let output = identity<string>("hello");
6. 如何使用模块?
模块用于组织代码,防止命名冲突:
// module1.ts
export function add(a: number, b: number) {
return a + b;
}
// main.ts
import { add } from './module1';
console.log(add(1, 2));
7. 什么是命名空间?
命名空间是另一种组织代码的方式,主要用于与全局命名空间共享代码:
namespace Drawing {
export class Point {
x: number;
y: number;
}
export class Line {
pointA: Point;
pointB: Point;
}
}
let p1 = new Drawing.Point();
p1.x = 10;
p1.y = 20;
8. 如何使用装饰器?
装饰器是一种特殊类型的声明,可以修改类的行为:
function configurable(configurable: boolean) {
return function(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
descriptor.configurable = configurable;
}
}
class Example {
@configurable(false)
name = 'TypeScript';
}
9. 什么是联合类型?
联合类型允许一个变量具有几种类型中的任意一种:
function printId(id: number | string) {
console.log(id);
}
printId(10); // OK
printId("20"); // OK
10. 如何定义枚举?
枚举类型提供了一种定义一组命名的常量的方法:
enum Color { Red, Green, Blue }
let c: Color = Color.Green;