Docs
Concepts
Enum

Enum

⚠️

There is no enum in JavaScript, and Rust enum is very different from TypeScript enum. You need to 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]
pub enum Kind {
  Duck,
  Dog,
  Cat,
}

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

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

In TypeScript, numeric enum members also get a reverse mapping from enum values to enum names. However, in Rust, we don't have this reverse mapping behavior. 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.