@@ -3773,11 +3773,11 @@ __wbg_set_wasm(wasm);"
3773
3773
}
3774
3774
3775
3775
fn generate_enum ( & mut self , enum_ : & AuxEnum ) -> Result < ( ) , Error > {
3776
- let docs = format_doc_comments ( & enum_. comments , None ) ;
3777
3776
let mut variants = String :: new ( ) ;
3778
3777
3779
3778
if enum_. generate_typescript {
3780
- self . typescript . push_str ( & docs) ;
3779
+ self . typescript
3780
+ . push_str ( & format_doc_comments ( & enum_. comments , None ) ) ;
3781
3781
self . typescript
3782
3782
. push_str ( & format ! ( "export enum {} {{" , enum_. name) ) ;
3783
3783
}
@@ -3808,6 +3808,18 @@ __wbg_set_wasm(wasm);"
3808
3808
if enum_. generate_typescript {
3809
3809
self . typescript . push_str ( "\n }\n " ) ;
3810
3810
}
3811
+
3812
+ // add an `@enum {1 | 2 | 3}` to ensure that enums type-check even without .d.ts
3813
+ let mut at_enum = "@enum {" . to_string ( ) ;
3814
+ for ( i, ( _, value, _) ) in enum_. variants . iter ( ) . enumerate ( ) {
3815
+ if i != 0 {
3816
+ at_enum. push_str ( " | " ) ;
3817
+ }
3818
+ at_enum. push_str ( & value. to_string ( ) ) ;
3819
+ }
3820
+ at_enum. push ( '}' ) ;
3821
+ let docs = format_doc_comments ( & enum_. comments , Some ( at_enum) ) ;
3822
+
3811
3823
self . export (
3812
3824
& enum_. name ,
3813
3825
& format ! ( "Object.freeze({{ {} }})" , variants) ,
@@ -3830,18 +3842,17 @@ __wbg_set_wasm(wasm);"
3830
3842
. contains ( & TsReference :: StringEnum ( string_enum. name . clone ( ) ) )
3831
3843
{
3832
3844
let docs = format_doc_comments ( & string_enum. comments , None ) ;
3845
+ let type_expr = if variants. is_empty ( ) {
3846
+ "never" . to_string ( )
3847
+ } else {
3848
+ variants. join ( " | " )
3849
+ } ;
3833
3850
3834
3851
self . typescript . push_str ( & docs) ;
3835
3852
self . typescript . push_str ( "type " ) ;
3836
3853
self . typescript . push_str ( & string_enum. name ) ;
3837
3854
self . typescript . push_str ( " = " ) ;
3838
-
3839
- if variants. is_empty ( ) {
3840
- self . typescript . push_str ( "never" ) ;
3841
- } else {
3842
- self . typescript . push_str ( & variants. join ( " | " ) ) ;
3843
- }
3844
-
3855
+ self . typescript . push_str ( & type_expr) ;
3845
3856
self . typescript . push_str ( ";\n " ) ;
3846
3857
}
3847
3858
0 commit comments