Skip to content
📖 Auto 版 TypeScript Handbook本书目录

对象类型 ​

Auto 提供两种主要的对象类型定义机制:type 用于数据结构(转译为 TypeScript class),spec 用于行为契约(转译为 TypeScript interface)。

spec 关键字(接口) ​

使用 spec 定义行为契约——一组类型必须实现的方法签名。这是 Auto 中 等同于 TypeScript interface 的机制。

spec 声明

spec 转译为带有方法签名的 TypeScript interface。实现 spec 的类型必须 为所有方法提供具体实现。

实现 spec ​

使用 type Name as SpecName 声明类型实现了某个 spec。这是 Auto 中等同 于 TypeScript class X implements Y 的机制。

实现 spec

类型声明上的 as Greetable 子句告诉 TypeScript 编译器 User 实现了 Greetable 接口。在 type 块内定义的方法成为类方法,使用 self (转译为 this)访问字段。

使用 has 进行组合 ​

Auto 通过 has 关键字支持组合。当一个类型 has 另一个类型时,它 嵌入后者的所有方法。这是混入或 trait 组合的一种形式。

使用 has 进行组合

type Duck has Wing 声明将 Wing 的所有方法嵌入 Duck。在 TypeScript 输出中,方法直接内联到 Duck 类中。这是继承的有力替代方案——你 可以在不产生 extends 链紧耦合的情况下获得代码复用。

可选字段 ​

Auto 支持使用字段名后的 ? 后缀定义可选字段:

可选字段

可选字段转译为 TypeScript 的可选属性(port?: number),构造函数参数 也是可选的。

快速参考 ​

TypeScriptAuto描述
interface X { }spec X { }行为契约
class X implements Ytype X as Y { }实现接口
class X extends Y—继承(仅限 TypeScript)
class X { ... }type X { ... }数据结构
obj.xself.x 或 obj.x属性访问
prop?: Tprop? T可选属性

TypeScript 独有功能 ​

继承(extends) ​

typescript
// 仅限 TypeScript
class Dog extends Animal {
    breed: string;
}

Auto 目前在 a2ts 转译器中不支持通过 extends 进行类型继承。请改用 has 组合。

交叉类型(&) ​

typescript
// 仅限 TypeScript
type ColorfulCircle = Colorful & Circle;

Auto 使用 has 进行组合,在实现层面达到类似的效果。

只读属性 ​

typescript
// 仅限 TypeScript
class Person {
    readonly name: string;
}

Auto 使用 let(不可变)声明变量,但没有字段的 readonly 修饰符。

基于 MIT 许可发布。