TypeScript在线调试 (opens new window)
# 1.什么是TypeScript
Typescript 是一个强类型的 JavaScript 超集,支持ES6语法,支持面向对象编程的概念,如类、接口、继承、泛型等。
Typescript并不直接在浏览器上运行,需要编译器编译成纯Javascript来运行。
# 2.基本类型
let num: number = 42;
let str: string = "Hello";
let bool: boolean = true;
let arr: number[] = [1, 2, 3];
let tuple: [string, number] = ["Alice", 25]; // 元组
let anyVar: any = "anything"; // 任意类型
let unknownVar: unknown; // 比 any 更安全
let voidVar: void = undefined; // 无返回值
let nullVar: null = null;
let undefinedVar: undefined = undefined;
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
TypeScript 能自动推断变量类型:
let x = 10; // 推断为 number
x = "hello"; // ❌ 错误
1
2
2
# 3.接口(Interface)与类型别名(Type Alias)
- 接口
interface User {
name: string;
age?: number; // 可选属性
readonly id: number; // 只读属性
[key: string]: any; // 索引签名(允许额外属性)
}
const user: User = { name: "Alice", id: 1 };
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
- 类型别名
type Point = {
x: number;
y: number;
};
type ID = number | string; // 联合类型
1
2
3
4
5
6
2
3
4
5
6
- 区别
Interface | Type Alias |
---|---|
可扩展(extends) | 不可扩展 |
支持声明合并(同名合并) | 不支持 |
适合对象类型) | 适合联合类型、复杂类型 |
# 常见问题
# any 和 unknown 的区别?
any
会绕过类型检查,unknown
必须进行类型断言或收窄
# 如何避免 any 滥用?
- 使用更精确的类型(如联合类型、泛型)。
- 启用
tsconfig.json
中的noImplicitAny
。
# interface 和 type 如何选择?
需要扩展或合并时用 interface
,复杂类型用 type
。