跳到主要内容

类型系统

本章汇总 Sii 提供的类型与相关能力,包含标量、容器、复合、检查与转换等。

标量类型(基础)

  • int:整型数值
  • singlef:单精度浮点数
  • multif:多精度浮点数
  • bool:布尔类型(字面量:truefalse
  • str:单字符(如 'a'' '
  • string:字符串
  • unknown:未知类型(适用于输入等不确定类型场景)
  • void:无返回值

字面量示例:

let a: int = 10;
let b: singlef = 3.14;
let c: multif = 2.718281828;
let d: bool = true;
let e: str = 'x';
let f: string = "hello";
let u: unknown = new ToGet(); // 输入得到的未知类型

容器与结构

  • arr:数组
  • obj:对象

复合类型

联合类型:

// 这是用来定义获取用户输入的方法,详情见‘输入与输出’章节
let maybeText: unknown | string = new ToGet();

说明:A | B 表示值可以是 A 或 B。

类型检查

使用 typeins(标识符或表达式) 查看当前值的类型信息:

let age: int = 18;
// 输出类型提示,便于调试与自检
typeins(age);
// 输出结果:
// type: number
// value: 18

需要注意的是,当检测int,singlef,multif类型时,typeins返回的type均为number,这其实是一种描述性类型名,便于开发者了解值类型,并非类型系统的标量类型

类型转换

提示

版本支持:该功能最低支持Sii 1.2.1版本,1.2.1以下版本具有目前已知的问题,推荐开发者将Sii CLI升级至1.2.1及以上版本,升级指南:系统更新

支持两类常用写法(示例为数值转字符串,其他方向类推):

let n: int = 10;
let s: string = n.toString(); // 方法式转换

// 其他常见:
let i2: int = s1.toInt();
let f1: singlef = n.toSimplef(); // 单精度
let f2: multif = n.toMultif(); // 多精度

注:初版不提供强制转换,优先采用安全可读的转换方式。

小结

  • 标量覆盖数值、字符、布尔、字符串与空值语义
  • 容器提供 arrobj
  • 通过联合类型表达不确定性,配合 unknowntypeins
  • 转换提供函数式与方法式两种常见写法