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
chore: type unknown env as any #7702
Conversation
@@ -36,7 +36,7 @@ interface ImportMeta { | |||
} | |||
|
|||
interface ImportMetaEnv { | |||
[key: string]: string | boolean | undefined | |||
[key: string]: any |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How about adding this line? (in addition to this change)
[key: string]: any | |
[key: string]: any | |
[env: `VITE_${string}`]: string |
It requires template literal types support which is implemented in TypeScript 4.1+ (released 2020/11).
This type will work like below.
/// <reference types="vite/client" />
interface ImportMetaEnv {
VITE_FOO: string
VITE_BAR: 'aa' | 'bbb'
VITE_AA: number // error "this should be string" here
}
import.meta.env.VITE_BAR // 'aaa' | 'bbb'
import.meta.env.VITE_VAL // string
One thing to consider is that you can't define variables that are not string types starting with VITE with define
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
One thing to consider is that you can't define variables that are not string types starting with VITE with
define
.
Yeah I think that's the issue from #6637 that people want to type it as boolean
or number
, but it was actually a string. And if they really want it to actually be a boolean
/number
, they have to use define
for it. Not sure how common this is needed though, but your suggestion could be breaking some setups (though quite neat).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we should merge this PR in its current form for 2.9. And then, @sapphi-red maybe you could create another PR with your proposal and justify the Typescript version requirement, and we target 3.0 for the change?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sure. I will create a PR with more details.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh there is a envPrefix
option. It is impossible to do this approach.
Description
Type
import.meta.env.*
asany
for unknown keys, as thedefine
option can be used to defineimport.meta.env.*
too with JS identifiers.Additional context
Brought up in #6930 and #4415 (comment)
What is the purpose of this pull request?
Before submitting the PR, please make sure you do the following
fixes #123
).