赞美 void, ECMAScript 秒变静态类型语言

245 阅读1分钟

ECMAScript 的动态类型特性既给使用者提供了方便, 其方便性受到喜爱, 同时不支持静态类型也成为最大的诟病. 今天我说有办法

使用标准 ECMAScript 语法实现静态类型描述


你信么? 在看下文之前, 你静静的思考 30 分钟, 这种方法存在么?

为了让你多思考一会儿, 我得唠叨几句.

这个方法是我在开发 postdoc 后置文档规范 过程中想到的.

void 掌管静态类型的一切, 得到你的赞美, 静态类型就会出现

赞美 void

赞美 void

赞美 void


let
    v = void(String)||'',         // v 类型为 String, 值为 ''
    o = void([String,Number])||0, // o 类型允许为 String,Number, 值为 0
    i = void(Object),             // i 类型为 Object, 值为 undefined
    d = void [[String]];          // d 类型为 String 数组, 值为 undefined

function fn() {
    void String; // fn 返回值为 String 类型
}

class PureStructure {                // 描述纯结构体, 只有字段没有方法
  constructor() {
    void {
      name: void [!'',String],       // 字符串类型, 且必须有值
      age: void([!0, Number]) || 0,  // 数值类型, 必须有值, 缺省值为 0
      email: void String             // 字符串类型, 可以省略
    };
  }
}

我向 T39 提交了一个提案: proposal-static-type-constraints-features

这个提案能否被接受是另外的事情, T39 或许有更多的考虑.

重要的是该方法是无副作用的, 即便无法进入标准, 我们也可以大胆的使用.

赞美 void

赞美 void

赞美 void