初学 TypeScript 遇到几个问题和疑惑:
- 静态属性修饰符
static和私有类字段前缀#互斥; - 类字段定义的实例属性作为方法使用时,装饰器语法失效;
- 私有属性修饰符
private和#定义的属性的行为差异,前者开发时提示,编译后类外部仍可以访问该属性,类似伪私有属性,后者任何时候都不能在类外部访问。
对于问题 2 和问题 3,我能结合 JS 求同存异,对于问题 1,是我最不能理解的一点。TypeScript 作为 Javascript 的超集,在我未正式接触的感知中,我一直以为是完全兼容 JS 语法或者说直觉是对 ES 规范的一种更强大的实现,问题 1 语法在高版本浏览器即使不借助 Babel 编译转化也可以正常执行,TS 却不支持,这是我标题的想要表达疑惑所在,想请问有没有具体的解决方案或者进程中的提案。
我的方案(目前测试项目是基于 rollup 构建的):
-
rollup & Babel 生态支持伪 TypeScript [ Done ] 借助 Babel 的预设或者插件可以解决问题一,但这是会丧失
type check,这显然违背了使用 TS 的初衷,不到万不得已本人并不想采用此方案; -
rollup & TypeScript [ TODO ] 使用了 rollup 的 TypeScript 插件,其中在 TS 编译之前转化代码的
before钩子配置,我尝试使用Babel的编译功能作为 TS 编译的前置钩子,也就是在 TS 真正编译之前先让Babel转化static #propName语法,然后再让 TS 编译,目前是理论阶段,因为我的工厂函数失效了,不知道有没有大佬尝试过before转化这种rollup的 TS 插件配置,请问此思路是否存在可行性。
