You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
In JS, importing JSON should not give an error #7071
This is the domain of plugin loaders and there are mechanism already for describing how a plugin loader would work and #6615 will provide a better mechanism for handling this.
Building this into TypeScript directly wouldn't make sense and likely break lots of other implementations, where people are properly using loader plugins.
Kitson Kelly (@kitsonk) Sorry but I'm not sure why it about plugin loader while this case is about intellisense (which I think it is provided by salsa)
The compiler could do this in theory, parsing the JSON structure in a similar way to how it would parse an object literal in a .ts or .js file. But as Kitson Kelly (@kitsonk) points out this is not a standardised language-level feature. Node.js allows you to require JSON files, but it's not part of any standard so it's unlikely to be implemented directly in TypeScript.
Having said that, JSX parsing is implemented directly in TypeScript even though that's not a standard. So it's probably more a question of demand and cost/benefit. If hundreds of +1s start appearing in this issue, who knows? I personally doubt that there's a lot of demand for this, and it's pretty easy to add your own typings for JSON documents anyway.
Troy Gerwien (@yortus) I think both require and module is also not standard js. It is standard of just for nodejs which also standardize load json file as module
I'm not sure how salsa implement, which part call which compiler, however salsa could read all those weird jsdoc and constructor to parse into intellisense so just include require json file should be in the same place as putting other intellisense
It would be doable with some work, and as commented, we already have some Node specific behavior. That said, as others have commented, this is a very little used feature, so unless we see a lot of demand for it, I don't see it reaching the top of our TODO list any time soon.
I am not 100% sure in Salsa, but isn't there a way to assert the an object literal type in JSDoc for this, something like:
/** * @type {Foo} */varfoo=require('foo.json');
In TypeScript that is generally what I do when loading JSON and while in theory the structures could get out of sync at design time, they of course can get out of sync at run-time too, so having them "automagically" determined at run-time is of somewhat limited value.
I'd be interested in taking a swing at this, but I haven't worked with Typescripts internals before. Any advice beyond the general contributing guidance?
I would assume the first step is getting a JSON parser in place. i would expect that to be based on our current parser, possibly with an option to createSourceFile, or just a new ScriptKind.
We will need to then wire module resolution to accept .json files, along with other extensions.
Then wire the type system pieces to get the type of a JSON object, that should not be too hard.
Activity
kitsonk commentedon Feb 13, 2016
This is the domain of plugin loaders and there are mechanism already for describing how a plugin loader would work and #6615 will provide a better mechanism for handling this.
Building this into TypeScript directly wouldn't make sense and likely break lots of other implementations, where people are properly using loader plugins.
Thaina commentedon Feb 13, 2016
Kitson Kelly (@kitsonk) Sorry but I'm not sure why it about plugin loader while this case is about intellisense (which I think it is provided by salsa)
yortus commentedon Feb 13, 2016
The compiler could do this in theory, parsing the JSON structure in a similar way to how it would parse an object literal in a
.tsor.jsfile. But as Kitson Kelly (@kitsonk) points out this is not a standardised language-level feature. Node.js allows you to require JSON files, but it's not part of any standard so it's unlikely to be implemented directly in TypeScript.Having said that,
JSXparsing is implemented directly in TypeScript even though that's not a standard. So it's probably more a question of demand and cost/benefit. If hundreds of +1s start appearing in this issue, who knows? I personally doubt that there's a lot of demand for this, and it's pretty easy to add your own typings for JSON documents anyway.Thaina commentedon Feb 13, 2016
Troy Gerwien (@yortus) I think both
requireandmoduleis also not standard js. It is standard of just for nodejs which also standardize load json file as moduleI'm not sure how salsa implement, which part call which compiler, however salsa could read all those weird jsdoc and constructor to parse into intellisense so just include require json file should be in the same place as putting other intellisense
billti commentedon Feb 13, 2016
It would be doable with some work, and as commented, we already have some Node specific behavior. That said, as others have commented, this is a very little used feature, so unless we see a lot of demand for it, I don't see it reaching the top of our TODO list any time soon.
kitsonk commentedon Feb 15, 2016
I am not 100% sure in Salsa, but isn't there a way to assert the an object literal type in JSDoc for this, something like:
In TypeScript that is generally what I do when loading JSON and while in theory the structures could get out of sync at design time, they of course can get out of sync at run-time too, so having them "automagically" determined at run-time is of somewhat limited value.
RyanCavanaugh commentedon Mar 15, 2016
Accepting PRs on this if anyone would like to give it a shot. This should only be allowed when the module system is
commonjsRichiCoder1 commentedon Mar 15, 2016
I'd be interested in taking a swing at this, but I haven't worked with Typescripts internals before. Any advice beyond the general contributing guidance?
basarat commentedon Mar 15, 2016
Minor: that require statement should be most likely have a relative path prefix
require('./test.js')because of how node modules work 🌹mhegazy commentedon Mar 15, 2016
I would start by looking at:
https://github.com/Microsoft/TypeScript/wiki/Architectural-Overview and https://github.com/Microsoft/TypeScript/wiki/Contributing-to-TypeScript
I would assume the first step is getting a JSON parser in place. i would expect that to be based on our current parser, possibly with an option to createSourceFile, or just a new ScriptKind.
We will need to then wire module resolution to accept
.jsonfiles, along with other extensions.Then wire the type system pieces to get the type of a JSON object, that should not be too hard.
7 remaining items
zheeeng commentedon Sep 25, 2017
+1 For this feature to benefits usage such as importing JSON configurations/locales to projects.
[-]Please allow require to work with json file[/-][+]In JS, importing JSON should not give an error[/+]