-
Notifications
You must be signed in to change notification settings - Fork 12.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Recursive type definitions regression in 3.4.0 #30841
Comments
Recursive type aliases are, unfortunately, not supported - see #3496, #6230, and #24897 (comment). |
However, the code above did work before 3.4.0, and the infered type is correct. |
This didn't actually work in the past, you were just getting a silent |
Nope. The following derived const makeAction = <T extends string, P extends object, Args extends any[]>(
type: T,
fn: (...args: Args) => P,
) => {
const action = (...args: Args) => {
const ret = fn(...args) as P & { type: T }
ret.type = type
return ret
}
action.type = type
return action
}
const actions = {
a: makeAction('a', () => ({})),
b: makeAction('b', (a: number, b: string) => ({ a, b })),
}
type Types = ActionType<typeof actions>
const fn = (data: Types) => data
fn(actions.a()) // work as expected
fn(actions.b(1, 'a')) // work as expected
fn(actions.c()) // ts error due to Property 'c' does not exist
fn({ type: 'c' }) // ts error due to Type '"c"' is not assignable to type '"a" | "b"'.ts(2322) The type Types = {
type: "a";
} | ({
a: number;
b: string;
} & {
type: "b";
})
It means that ts >= 3.4.0 will make the above code illegal intentionally (because of detecting a circularity earlier than before)? |
This issue has been marked as a 'Duplicate' and has seen no recent activity. It has been automatically closed for house-keeping purposes. |
TypeScript Version: 3.4.0-dev.201xxxxx
Search Terms:
Recursive
Conditional
Code
Expected behavior:
No errors. It's worth noting that it works in 3.3.4, with the correct derived type.
Actual behavior:
Running
tsc
command line, it reports the following errors:Playground Link:
Related Issues:
The text was updated successfully, but these errors were encountered: