ecomfe / eslint-config

eslint shareable config for efe
MIT License
118 stars 31 forks source link

关于目前Typescript规则中禁用namespace功能的一些想法 #58

Open franckchen opened 3 years ago

franckchen commented 3 years ago

根据目前的规则, Typescript的namespace是被推荐禁用的 https://github.com/ecomfe/eslint-config/blob/6ce40ed1773a5dfd3eeff5107b19fd9f331c73d9/typescript/index.js#L60

个人对于namespace钟爱有加, 下面试举一例

export class Person {
    gender: Person.gender;
}

export namespace Person {
    export type gender = 'male' | 'female';
}

可以看出将类型挂载在class上令整体代码更加面向对象,更加利于理解, 外部引用也更加自然

import {Person} from './Person';

const myGender: Person.gender = 'male';

另外Typescript Deep Dive中Enum with static functions也是很好的一个例子。感觉很赞

此外,使用使用namespace替换传统的export对象字面量,感觉也挺香的

故此,是否我们的规则应该放开对于namespace的使用呢?如果认可将PR进行一定调整~

otakustay commented 3 years ago

我不建议开放namespace。模块化地管理类型更合适,如果类型多,可以import * as T from './some-module';这样子用

如果开放命名空间,滥用的可能性会大于正确、合适地使用。因此如果实在需要命名空间,用注释禁一下就好了

franckchen commented 3 years ago

有道理, 目前非tsc自身,其他编译器,尤其是swc, 在面对namespace的时候都时常出点问题