Different `typeof` behavior between ES targets
#49.394 aberto em 5 de jun. de 2022
Métricas do repositório
- Stars
- (48.455 stars)
- Métricas de merge de PR
- (Mesclagem média 6d 17h) (9 fundiu PRs em 30d)
Description
Bug Report
🔎 Search Terms
Sorry, hard to formulate.
🕗 Version & Regression Information
- This bug happens at least since version 3.3.3 (current lowest in playground)
- This bug happens only when
targetis greater thanes5
⏯ Playground Link
Playground link with relevant code
💻 Code
declare function create<T>(fn: (get: () => T) => T): T
// Error: Cannot find name '_self'.
const store = create((get: () => typeof _self) => {
const _self = {
id: 123
}
return _self
})
🙁 Actual behavior
If tsconfig property target is greater than es5 TS gives an error: Cannot find name '_self', yet type of store is inferred correctly.
For es3 and es5 it works fine.
🙂 Expected behavior
No error 😄
I think it could be related to hoisting rules. Because es5 doesn't have let and const keywords and var is considered to be visible anywhere inside function. But maybe I'm wrong.
Anyway, it would be nice if it worked, as it allows to help the compiler to infer circularly dependent types. Here is the actual example: https://github.com/pmndrs/zustand/discussions/991.