1- -- !nonstrict
1+ -- !strict
22--[=[
33 These settings definitions are used to define a setting and register them on both the client and server. See
44 [SettingDefinitionProvider] for more details on grouping these.
@@ -25,6 +25,8 @@ local Players = game:GetService("Players")
2525
2626local DuckTypeUtils = require (" DuckTypeUtils" )
2727local Maid = require (" Maid" )
28+ local Observable = require (" Observable" )
29+ local Promise = require (" Promise" )
2830local ServiceBag = require (" ServiceBag" )
2931local SettingProperty = require (" SettingProperty" )
3032local SettingsDataService = require (" SettingsDataService" )
@@ -34,18 +36,29 @@ SettingDefinition.ClassName = "SettingDefinition"
3436SettingDefinition .ServiceName = " SettingDefinition"
3537SettingDefinition .__index = SettingDefinition
3638
39+ export type SettingDefinition <T> = typeof (setmetatable (
40+ {} :: {
41+ _settingName : string ,
42+ _defaultValue : T ,
43+ _maid : Maid .Maid ,
44+ _serviceBag : ServiceBag .ServiceBag ,
45+ ServiceName : string ,
46+ },
47+ {} :: typeof ({ __index = SettingDefinition })
48+ ))
49+
3750--[=[
3851 Constructs a new setting definition which defines the name and the defaultValue
3952
4053 @param settingName string
4154 @param defaultValue T
4255 @return SettingDefinition<T>
4356]=]
44- function SettingDefinition .new (settingName , defaultValue )
57+ function SettingDefinition .new < T > (settingName : string , defaultValue : T ): SettingDefinition <T>
4558 assert (type (settingName ) == " string" , " Bad settingName" )
4659 assert (defaultValue ~= nil , " DefaultValue cannot be nil" )
4760
48- local self = setmetatable ({}, SettingDefinition )
61+ local self : SettingDefinition <T> = setmetatable ({} :: any , SettingDefinition )
4962
5063 self ._settingName = settingName
5164 self ._defaultValue = defaultValue
6073
6174 @param serviceBag ServiceBag
6275]=]
63- function SettingDefinition : Init ( serviceBag : ServiceBag.ServiceBag )
76+ function SettingDefinition . Init < T >( self : SettingDefinition<T> , serviceBag : ServiceBag.ServiceBag )
6477 assert (serviceBag , " No serviceBag" )
65- assert (not self ._maid , " Already initialized" )
78+ assert (not ( self :: any ) ._maid , " Already initialized" )
6679
6780 self ._maid = Maid .new ()
6881 self ._serviceBag = assert (serviceBag , " No serviceBag" )
7790 @param player Player
7891 @return T
7992]=]
80- function SettingDefinition : Get ( player : Player )
93+ function SettingDefinition . Get < T >( self : SettingDefinition<T> , player : Player ): T
8194 assert (typeof (player ) == " Instance" and player :IsA (" Player" ) or player == nil , " Bad player" )
8295 assert (self ._serviceBag , " Retrieve from serviceBag" )
8396
84- return self :GetSettingProperty (self ._serviceBag , player ): GetValue ()
97+ return self :GetSettingProperty (self ._serviceBag , player ). Value
8598end
8699
87100--[=[
90103 @param player Player
91104 @param value T
92105]=]
93- function SettingDefinition : Set ( player : Player , value )
106+ function SettingDefinition . Set < T >( self : SettingDefinition<T> , player : Player , value : T ): ( )
94107 assert (typeof (player ) == " Instance" and player :IsA (" Player" ) or player == nil , " Bad player" )
95108 assert (self ._serviceBag , " Retrieve from serviceBag" )
96109
103116 @param player Player
104117 @return Promise<T>
105118]=]
106- function SettingDefinition : Promise ( player : Player )
119+ function SettingDefinition . Promise < T >( self : SettingDefinition<T> , player : Player ): Promise . Promise <T>
107120 assert (typeof (player ) == " Instance" and player :IsA (" Player" ) or player == nil , " Bad player" )
108121 assert (self ._serviceBag , " Retrieve from serviceBag" )
109122
117130 @param value T
118131 @return Promise<T>
119132]=]
120- function SettingDefinition : PromiseSet ( player : Player , value )
133+ function SettingDefinition . PromiseSet < T >( self : SettingDefinition<T> , player : Player , value : T ): Promise . Promise < () >
121134 assert (typeof (player ) == " Instance" and player :IsA (" Player" ) or player == nil , " Bad player" )
122135 assert (self ._serviceBag , " Retrieve from serviceBag" )
123136
130143 @param player Player
131144 @return Promise<T>
132145]=]
133- function SettingDefinition : Observe ( player : Player )
146+ function SettingDefinition . Observe < T >( self : SettingDefinition<T> , player : Player ): Observable . Observable <T>
134147 assert (typeof (player ) == " Instance" and player :IsA (" Player" ) or player == nil , " Bad player" )
135148 assert (self ._serviceBag , " Retrieve from serviceBag" )
136149
154167 @param player Player
155168 @return SettingProperty<T>
156169]=]
157- function SettingDefinition :GetSettingProperty (serviceBag , player : Player )
170+ function SettingDefinition .GetSettingProperty <T >(
171+ self : SettingDefinition<T> ,
172+ serviceBag : ServiceBag.ServiceBag ,
173+ player : Player
174+ ): SettingProperty .SettingProperty <T>
158175 assert (ServiceBag .isServiceBag (serviceBag ), " Bad serviceBag" )
159176 assert (typeof (player ) == " Instance" and player :IsA (" Player" ) or player == nil , " Bad player" )
160177
169186 @param serviceBag ServiceBag
170187 @return SettingProperty<T>
171188]=]
172- function SettingDefinition :GetLocalPlayerSettingProperty (serviceBag )
189+ function SettingDefinition .GetLocalPlayerSettingProperty <T >(
190+ self : SettingDefinition<T> ,
191+ serviceBag : ServiceBag.ServiceBag
192+ ): SettingProperty .SettingProperty <T>
173193 assert (ServiceBag .isServiceBag (serviceBag ), " Bad serviceBag" )
174194
175195 return self :GetSettingProperty (serviceBag , Players .LocalPlayer )
@@ -179,19 +199,19 @@ end
179199 Retrieves the default name of the setting
180200 @return string
181201]=]
182- function SettingDefinition : GetSettingName ( ): string
202+ function SettingDefinition . GetSettingName < T >( self : SettingDefinition<T> ): string
183203 return self ._settingName
184204end
185205
186206--[=[
187207 Retrieves the default value for the setting
188208 @return T
189209]=]
190- function SettingDefinition : GetDefaultValue ()
210+ function SettingDefinition . GetDefaultValue < T >( self : SettingDefinition<T> ): T
191211 return self ._defaultValue
192212end
193213
194- function SettingDefinition : Destroy ()
214+ function SettingDefinition . Destroy < T >( self : SettingDefinition<T> ): ()
195215 self ._maid :DoCleaning ()
196216end
197217
0 commit comments