CORDIS / TYPES & RUNTIME

编译器认识它,进程就有它吗?

分别改变声明可见性与实现可用性,比较静态检查和消费者状态。

选择条件 · 支持方向键

当前 Program 缺少字段,运行时也没有实现

两边都缺时的类型检查与服务激活当前 Program 缺少字段,运行时也没有实现;声明可见性与同域活跃实现分别判定,不将编译通过视为运行就绪。类型系统 · 当前 Program 是否包含声明运行时 · 当前服务域的实现是否就绪类型入口import type {}声明未进入Context.fs无此字段尚无声明字段检查TS2339只说明类型提供方 Fiber未挂载未提供当前 fsfs 实现查不到按标签查找消费者 FiberPENDING主体尚未执行声明与实现分别判定;箭头表示依赖关系。
两边都缺时的类型检查与服务激活当前 Program 缺少字段,运行时也没有实现;声明可见性与同域活跃实现分别判定,不将编译通过视为运行就绪。类型 Program运行时类型入口type import声明未进入Context.fs无此字段尚无声明字段检查TS2339只说明类型提供方 Fiber未挂载未提供当前 fsfs 实现查不到按标签查找消费者PENDING主体尚未执行声明与实现分别判定;箭头表示依赖关系。

类型入口与运行组合都需要补齐。单独改一边,不会自动修复另一边。

观察点当前结果判定条件
Context.fs 字段TS2339当前 Program 的判断
ctx.get('fs')undefined运行时按域探测
inject: ['fs']PENDING假设其他初始化成功
查看推演条件与源码定位

源码定位:packages/fs/fs/src/index.ts:45/87;tool-fs/src/read.ts:10;vendor/cordis/src/service.ts:42;fiber.ts:597。
消费者仅声明 fs 一项依赖;实现就绪包含同域、提供者 ACTIVE、可选 check 通过,且假设消费者其他初始化成功。字段缺失时的运行结果仅讨论已有 JavaScript 进入运行时的条件;图不是 dsh 运行采样。

类型检查通过,消费者仍在等待实现

只有声明时的类型检查与服务激活类型检查通过,消费者仍在等待实现;声明可见性与同域活跃实现分别判定,不将编译通过视为运行就绪。类型系统 · 当前 Program 是否包含声明运行时 · 当前服务域的实现是否就绪类型入口import type {}声明已进入Context.fsFileSystem接口已合并字段检查通过只说明类型提供方 Fiber未挂载未提供当前 fsfs 实现查不到按标签查找消费者 FiberPENDING主体尚未执行声明与实现分别判定;箭头表示依赖关系。
只有声明时的类型检查与服务激活类型检查通过,消费者仍在等待实现;声明可见性与同域活跃实现分别判定,不将编译通过视为运行就绪。类型 Program运行时类型入口type import声明已进入Context.fsFileSystem接口已合并字段检查通过只说明类型提供方 Fiber未挂载未提供当前 fsfs 实现查不到按标签查找消费者PENDING主体尚未执行声明与实现分别判定;箭头表示依赖关系。

类型导入让编译器认识 fs,却不会挂载提供方。消费者主体仍处于等待条件中。

观察点当前结果判定条件
Context.fs 字段通过当前 Program 的判断
ctx.get('fs')undefined运行时按域探测
inject: ['fs']PENDING假设其他初始化成功
查看推演条件与源码定位

源码定位:packages/fs/fs/src/index.ts:45/87;tool-fs/src/read.ts:10;vendor/cordis/src/service.ts:42;fiber.ts:597。
消费者仅声明 fs 一项依赖;实现就绪包含同域、提供者 ACTIVE、可选 check 通过,且假设消费者其他初始化成功。字段缺失时的运行结果仅讨论已有 JavaScript 进入运行时的条件;图不是 dsh 运行采样。

运行时已有能力,当前 Program 仍缺少字段

只有实现时的类型检查与服务激活运行时已有能力,当前 Program 仍缺少字段;声明可见性与同域活跃实现分别判定,不将编译通过视为运行就绪。类型系统 · 当前 Program 是否包含声明运行时 · 当前服务域的实现是否就绪类型入口import type {}声明未进入Context.fs无此字段尚无声明字段检查TS2339只说明类型提供方 FiberACTIVE同域且就绪fs 实现可查得按标签查找消费者 FiberACTIVE主体可执行声明与实现分别判定;箭头表示依赖关系。
只有实现时的类型检查与服务激活运行时已有能力,当前 Program 仍缺少字段;声明可见性与同域活跃实现分别判定,不将编译通过视为运行就绪。类型 Program运行时类型入口type import声明未进入Context.fs无此字段尚无声明字段检查TS2339只说明类型提供方 FiberACTIVE同域且就绪fs 实现可查得按标签查找消费者ACTIVE主体可执行声明与实现分别判定;箭头表示依赖关系。

若已有 JavaScript 进入运行时,消费者可以取得服务;独立 TypeScript 消费方仍需正确的声明入口。

观察点当前结果判定条件
Context.fs 字段TS2339当前 Program 的判断
ctx.get('fs')实现值运行时按域探测
inject: ['fs']ACTIVE假设其他初始化成功
查看推演条件与源码定位

源码定位:packages/fs/fs/src/index.ts:45/87;tool-fs/src/read.ts:10;vendor/cordis/src/service.ts:42;fiber.ts:597。
消费者仅声明 fs 一项依赖;实现就绪包含同域、提供者 ACTIVE、可选 check 通过,且假设消费者其他初始化成功。字段缺失时的运行结果仅讨论已有 JavaScript 进入运行时的条件;图不是 dsh 运行采样。

声明可见与实现就绪,分别满足两个条件

两边齐备时的类型检查与服务激活声明可见与实现就绪,分别满足两个条件;声明可见性与同域活跃实现分别判定,不将编译通过视为运行就绪。类型系统 · 当前 Program 是否包含声明运行时 · 当前服务域的实现是否就绪类型入口import type {}声明已进入Context.fsFileSystem接口已合并字段检查通过只说明类型提供方 FiberACTIVE同域且就绪fs 实现可查得按标签查找消费者 FiberACTIVE主体可执行声明与实现分别判定;箭头表示依赖关系。
两边齐备时的类型检查与服务激活声明可见与实现就绪,分别满足两个条件;声明可见性与同域活跃实现分别判定,不将编译通过视为运行就绪。类型 Program运行时类型入口type import声明已进入Context.fsFileSystem接口已合并字段检查通过只说明类型提供方 FiberACTIVE同域且就绪fs 实现可查得按标签查找消费者ACTIVE主体可执行声明与实现分别判定;箭头表示依赖关系。

类型检查与运行激活分别成立。文件操作的参数、权限和业务条件仍由对应 API 检查。

观察点当前结果判定条件
Context.fs 字段通过当前 Program 的判断
ctx.get('fs')实现值运行时按域探测
inject: ['fs']ACTIVE假设其他初始化成功
查看推演条件与源码定位

源码定位:packages/fs/fs/src/index.ts:45/87;tool-fs/src/read.ts:10;vendor/cordis/src/service.ts:42;fiber.ts:597。
消费者仅声明 fs 一项依赖;实现就绪包含同域、提供者 ACTIVE、可选 check 通过,且假设消费者其他初始化成功。字段缺失时的运行结果仅讨论已有 JavaScript 进入运行时的条件;图不是 dsh 运行采样。

紫色表示类型路径,青色表示运行路径,玫红标记字段缺失或等待;文字同时给出各项结果。虚线表示当前缺少该条件。

固定源码 d7432673 · 关系推演,不是运行采样。本文另有 TypeScript 6.0.3 的独立语言实验;打印时显示四种组合。