--!strict export type StateData = { Get: (self: StateData) -> T } export type SourceData = { Get: (self: SourceData) -> T, Revision: number } export type State = StateData & { Compute: (self: StateData, fn: (self: StateData, prev: U?) -> U) -> U, ComputeN: (self: StateData, fn: (self: StateData, prev: U?, D...) -> U, D...) -> U, } local s: State = nil :: any local a: SourceData = nil :: any -- (A) deps 0개 — typing-limits ②쪼개기가 확인한 "무주석 통과" local r1 = s:Compute(function(self) return self:Get() * 2 end) local n1: number = r1 -- (B) deps 1개 + 무주석 local r2 = s:ComputeN(function(self, prev, d1) return self:Get() + d1:Get() end, a) -- (C) deps 1개 + dep만 주석 local r3 = s:ComputeN(function(self, prev, d1: SourceData) return self:Get() + d1:Get() end, a) local n3: number = r3