局部类型
在 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' };
}
}