Comments (11)
Note that this is quite important to make the schema legible. (It will reduce number of stacks in JSON schema validation error.)
from ts-json-schema-generator.
So the idea is to never output something of the form
"XXXX": {
"$ref": "#/definitions/YYYY"
}
and replace all occurrences of XXXX with YYYY
from ts-json-schema-generator.
This works as expected. We output intermediate aliases when they are exported.
You can hide a alias by not exporting it:
export interface Parent {
a: A;
}
export type A = RealA;
type RealA = { realA: string };
I think only exporting types that are used more than once is going to be more surprising (and hard to implement).
from ts-json-schema-generator.
Well, in Vega-Lite use case, we need the intermediate ones because RealA is generic and A is an alias for a specific form of generic.
Thus, we can't really avoid exporting the generic.
from ts-json-schema-generator.
Hmm, I guess we could use the @hide
annotation here to skip aliases. I don't think hiding an alias that's only used once is a good idea since it may be desired by the developer.
from ts-json-schema-generator.
FWIW, adding @hide
to RealA
currently doesn't skip aliases.
from ts-json-schema-generator.
Yep, we only respect @hide
for properties right now. I suggest that we also use it to ignore aliases. Would that be the solution that we want?
from ts-json-schema-generator.
I guess that sounds good to me.
I don't know if/how @hide
currently works for aliases at all.
from ts-json-schema-generator.
It doesn't. We only use it for properties of objects and interfaces.
from ts-json-schema-generator.
and interfaces
Oh well, it's worth noting that we actually want to keep the alias and hide the original interface.
Like hiding RealA
and keep only A
in the example above.
But more practical use case is to think if we have GenericA<T>
and type A = Generic<string>
, then we want to only keep A
.
I don't think hiding an alias that's only used once is a good idea since it may be desired by the developer.
I'd argue that in most cases, there is no good reason for the developer to want to keep the chaining since "an alias that's only used once" means that all references of the original interface is called via the alias, but the schema simply treat the alias as chaining more than real "alias".
from ts-json-schema-generator.
@private
and @internal
solves this problem
from ts-json-schema-generator.
Related Issues (20)
- V2 creates empty definitions after updating from V1 HOT 5
- CLI usage is throwing an error with node 22 HOT 3
- RegExp types are now emitted, breaking schema validation (v2.1.1) HOT 1
- Error when following exports?
- Dist types now require @types/ts-expose-internals HOT 9
- Fix CJS imports HOT 8
- Invalid index in type HOT 10
- CLI - ENOENT: no such file or directory, open 'package.json' HOT 3
- Error: Unknown type "undefined" HOT 2
- Required types not allowed HOT 1
- Generator crashed when no package version is set HOT 4
- Any way to indicate that a string is actually a date-time? HOT 7
- Breaking changes from v1 to v2 HOT 1
- Support for `"format": "uri-reference"` HOT 3
- Incorrect typing when a type uses Omit and inherits properties from a grandparent interface
- `--expose all` breaks generation with generic types. HOT 4
- How do you use ajv with references? HOT 4
- create schema uses `anyOf` instead of `allOf` HOT 5
- When I use discriminator, I am getting an error where it can't find the specific field HOT 1
- Allow using dependencies schema on certain prop HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from ts-json-schema-generator.