为啥typescript的类型系统不支持通过属性来选择子类型?

因为有namespace

namespace A { export type A = number}interface A { A: string}type b = Atype c = A.A可以看到,b和c的类型分别是number和string,两种写法有两个意思。

■网友
蟹妖哈,我就不查资料了。其实没什么,理论上支持那样的写法没有难度,但是编译会变慢的(编译器多跑点语法树),这玩意没有标准,基本也算是TS首创的,如果硬要编个什么理由,大概如下:
1、T最早是给范型设计的,所以优先支持中括号,比如:
type TypeA = { a:number; b:string;}type TypeB= TypeA; // 这里TypeB = number | string所以上面不可能用点号吧;
2、点号一般是模块或者对象实例才支持被索引,这里type本身更类似class、构造器:
class ClassA{ readonly a: string = \u0026#39;ABC\u0026#39;;}ClassA.a; //so what?new ClassA().a //is ok! 【为啥typescript的类型系统不支持通过属性来选择子类型?】


    推荐阅读