Expand description
Representations of JavaScript’s core builtin types.
§Modeling JavaScript Types
All JavaScript values in Neon implement the abstract Value
trait, which is the most generic way to work with JavaScript values. Neon provides a
number of types that implement this trait, each representing a particular
type of JavaScript value.
By convention, JavaScript types in Neon have the prefix Js
in their name,
such as JsNumber
(for the JavaScript number
type) or JsFunction
(for the JavaScript
function
type).
§Handles and Casts
Access to JavaScript values in Neon works through handles,
which ensure the safe interoperation between Rust and the JavaScript garbage
collector. This means, for example, a Rust variable that stores a JavaScript string
will have the type Handle<JsString>
rather than JsString
.
Neon types model the JavaScript type hierarchy through the use of casts.
The Handle::upcast()
method safely converts
a handle to a JavaScript value of one type into a handle to a value of its
supertype. For example, it’s safe to treat a JsArray
as a JsObject
, so you can do an “upcast” and it will
never fail:
fn as_object(array: Handle<JsArray>) -> Handle<JsObject> {
let object: Handle<JsObject> = array.upcast();
object
}
Unlike upcasts, the Handle::downcast()
method
requires a runtime check to test a value’s type at runtime, so it can fail with
a DowncastError
:
fn as_array<'a>(
cx: &mut impl Context<'a>,
object: Handle<'a, JsObject>
) -> JsResult<'a, JsArray> {
object.downcast(cx).or_throw(cx)
}
§The JavaScript Type Hierarchy
The top of the JavaScript type hierarchy is modeled with the Neon type
JsValue
. A handle to a JsValue
can refer to any JavaScript value. (For TypeScript programmers, this can be
thought of as similar to TypeScript’s unknown
type.)
From there, the type hierarchy divides into object types and primitive types:
The top of the object type hierarchy is JsObject
. A
handle to a JsObject
can refer to any JavaScript object.
The primitive types are the built-in JavaScript datatypes that are not object
types: JsBoolean
, JsNumber
,
JsString
, JsNull
, and
JsUndefined
.
§Object Types
The object type hierarchy further divides into a variety of different subtypes:
These include several categories of object types:
- Standard object types:
JsFunction
,JsArray
,JsDate
, andJsError
. - Typed arrays:
JsBuffer
,JsArrayBuffer
, andJsTypedArray<T>
. - Custom types:
JsBox
, a special Neon type that allows the creation of custom objects that own Rust data structures.
All object types implement the Object
trait, which
allows getting and setting properties of an object.
Modules§
- bigint
napi-6
Types for working withJsBigInt
. - Types and traits for working with binary buffers.
- Traits and utilities for extract Rust data from JavaScript values.
- Types and traits for working with JavaScript functions.
Structs§
- An error produced when constructing a date with an invalid value.
- A controller struct that can be used to resolve or reject a
JsPromise
. - The type of JavaScript
Array
objects. - The type of JavaScript
ArrayBuffer
objects. - JsBig
Int napi-6
The type of JavaScriptBigInt
values. - The type of JavaScript Boolean primitives.
- A JavaScript smart pointer object that owns Rust data.
- The type of Node
Buffer
objects. - The type of JavaScript
Date
objects. - The type of JavaScript
Error
objects. - The type of JavaScript
Function
objects. - JsFuture
napi-5
andfutures
- The type of JavaScript
null
primitives. - The type of JavaScript number primitives.
- The type of JavaScript objects, i.e., the root of all object types.
- The type of JavaScript
Promise
objects. - The type of JavaScript string primitives.
- The family of JavaScript typed array types.
- The type of JavaScript
undefined
primitives. - The type of any JavaScript value, i.e., the root of all types.
- An error produced when constructing a string that exceeds the limits of the runtime.
Enums§
- The error kinds corresponding to
DateError
Traits§
- A trait for finalizing values owned by the main JavaScript thread.
- The trait shared by all JavaScript values.
Type Aliases§
- The type of JavaScript
BigInt64Array
objects. - The type of JavaScript
BigUint64Array
objects. - The type of JavaScript
Float32Array
objects. - The type of JavaScript
Float64Array
objects. - The type of JavaScript
Int8Array
objects. - The type of JavaScript
Int16Array
objects. - The type of JavaScript
Int32Array
objects. - The type of JavaScript
Uint8Array
objects. - The type of JavaScript
Uint16Array
objects. - The type of JavaScript
Uint32Array
objects. - The result of constructing a new
JsString
.