Enum

⚠️

There is no enum in JavaScript, and Rust enum is very different from TypeScript enum. You need read this section carefully before you use Rust enum in JavaScript.

In NAPI-RS, Rust enum is basically transformed into a plain JavaScript Object.

lib.rs
#[napi]
enum Kind {
  Duck,
  Dog,
  Cat,
}

⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️

index.d.ts
export const enum Kind {
  Duck,
  Dog,
  Cat,
}

In TypeScript, numeric enums members also get a reverse mapping from enum values to enum names. But in Rust, we don’t have this reverse mapping behaviour. It is just a plain JavaScript Object.

String enum

lib.rs
#[napi(string_enum)]
enum Kind {
  Duck,
  Dog,
  Cat,
}

⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️

index.d.ts
export const enum Kind {
  Duck = 'Duck',
  Dog = 'Dog',
  Cat = 'Cat',
}

NAPI-RS doesn’t support generating Rust enum impl into JavaScript.