Comments (9)
This is implemented (with a bit different approach) in #19.
from ts-rs.
Yes, this should be possible.
It's currently implemented this way since this is the default behaviour of serde.
However, as you corrently pointed out, the current implementation of TS
doesn't allow for this.
A possible solution would be to define a TSConfig struct
struct TSConfig {
treat_option_as_optional: bool
}
which would be passed to TS::name
and TS::inline
.
Then, the proc macro, which generates a TS
implementation for your type, could parse a #[ts(treat_option_as_optional)]
attribute and pass the according TSConfig
instance to the calls.
Alternatively, this could just be solved by introducing a crate feature, and conditionally change the implementation of TS for Option<T: TS>
depending of it, but I think it'd be nicer if this could be done on a per-struct and per-field basis.
If you feel like it, you could give it a try - the code is not super complicated, and I'm always happy to help.
from ts-rs.
Thanks for your fast reply @NyxCode ! I actually agree with you about the implementation on a per-struct / per-field basis.
I would really like to give a try (never played with macro so far), I'll definitely get back to you but it's probably not gonna be soon since I'm quite busy at the moment.
from ts-rs.
Do you mean passing treat_option_as_optional
directly to both TS::name
and TS::inline
or there's a way to retrieve it from inside the functions without adding an additional parameter ?
from ts-rs.
Ping me on Discord if needed : Roms1383#0211
from ts-rs.
I thought about creating a struct like TSConfig and passing that to the functions.
That would make it easy to add additional attributes in the future.
from ts-rs.
Ah yes but when I was looking at it, it seems that it would have to be added in many many functions, am I correct?
I'd be up for a chat if you want!
from ts-rs.
p.s : I haven't yet pushed any changes on the fork because it's kinda messy at the moment (still logging stuff here and there to get familiar with your implementation and macro intricacies 😅)
from ts-rs.
sure, feel free to add me on discord. your ID is broken, i think the last digit is missing.
NyxCode#1137
from ts-rs.
Related Issues (20)
- bug: Using `#[ts(rename_all = "...")]` `snake_case`, `SCREAMING_SNAKE_CASE` and `kebab-case` is not compatible with serde
- Randomly failing `imports` test HOT 1
- Unqualified call to `Self::name()`
- `usize` and `isize` should be typed as `bigint` on 64-bit architectures HOT 6
- Feature request: `serde-wasm-bindgen` compatibility. HOT 5
- Feature request: How to export multiple types to the same file HOT 4
- Feature request: Typed array types HOT 3
- bug: Tuples cause imports to be missed HOT 5
- bug: files are missing final newlines
- bug: `export::path:absolute` function fails when `TS_RS_EXPORT_DIR` is set to an absolute path and the `path_bug` test is executed
- bug: TS generated tests fail on struct with `serde_json::Value` type when running `cargo test`. HOT 2
- `ts(optional)` should be working on any which has `skip_serializing_if` HOT 1
- Add all of `ts(function)` to docs. HOT 2
- publish release please HOT 5
- Use std::path::absolute HOT 2
- Feature request: allow method of including `[propName: string]: any` to type HOT 15
- Question to recent change `Records<K, V>` to `{ [key: K]: V }`
- `parse_docs` doesn't handle block doc comments properly
- bug: complex nested (and flattened) enum type produces invalid syntax HOT 1
- Dependency paths in Windows use back slash, though they should use the canonical forward slash HOT 1
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-rs.