Add reasoning for not preferring type-pack union syntax

This commit is contained in:
witchiest 2024-11-22 13:19:51 -05:00 committed by GitHub
parent 4f3753df13
commit 97f738eaf0
Signed by: DevComp
GPG key ID: B5690EEEBB952194

View file

@ -104,18 +104,16 @@ local success, result = pcall(mrow, "cat food", ":3")
## Alternatives ## Alternatives
Allow for type pack unions to be written by developers, with the syntax probably looking like this: Allow for type pack unions to be written by developers, with the syntax probably looking like this:
```luau ```luau
local function mrow(meow: string, mrrp: string): (true, string) | (false, nil) local function mrow(meow: string, mrrp: string): (true, string) | (false, nil)
-- code here -- code here
end end
``` ```
With this example breaking backwards compadibility with some types developers may have written already, as today the following is allowed: With this example breaking backwards compadibility with some types developers may have written already, as today the following is allowed:
```luau ```luau
-- inferred as: ((meow: string, mrrp: string) -> (true, string)) | false -- inferred as: ((meow: string, mrrp: string) -> (true, string)) | false
type mrrp = (meow: string, mrrp: string) -> (true, string) | false type mrrp = (meow: string, mrrp: string) -> (true, string) | false
``` ```
Although it should be mentioned that result types are the only valid usecase for type pack unions, and just having a result type would remove a potential footgun of someone using type pack unions for something thats not a result type.
Do nothing, and leave it up to developers if they want to write overloaded functions, or make their own result type. Do nothing, and leave it up to developers if they want to write overloaded functions, or make their own result type.