局部类型
在 3.1.2 节中,我们介绍了声明具有块级作用域的变量。TypeScript 同样支持声明具有块级作用域的局部类型,主要包括:
-
局部枚举类型。
-
局部类类型。
-
局部接口类型。
-
局部类型别名。
下例中在函数 f 内部分别声明了以上几种局部类型:
function f<T>() {
enum E {
A,
B,
}
class C {
x: string | undefined;
}
// 允许带有泛型参数
interface I<T> {
x: T;
}
// 可以引用其他局部类型
type A = E.A | E.B;
}
此例中,枚举类型 E、类类型 C、接口类型 I 和类型别名 A 都是局部类型。局部类型也允许带有类型参数,并且可以引用外层作用域中的类型参数。
类似于 let 声明和 const 声明,局部类型拥有块级作用域。例如,下例中在 if 分支和 else 支持中均声明了接口 T,它们仅在各自所处的块级作用域内生效。因此,这两个接口 T 不会相互影响,并且 if 分支中的代码也无法引用 else 分支中的接口 T。示例如下:
function f(x: boolean) {
if (x) {
interface T {
x: number;
}
const v: T = { x: 0 };
} else {
interface T {
x: string;
}
const v: T = { x: 'foo' };
}
}