Documentação
Conceitos
Sobrescrita de Tipos

Sobrescrita de Tipos

Na maioria dos casos, o NAPI-RS irá gerar os tipos TypeScript corretos para você. Mas em alguns cenários, você pode querer sobrescrever o tipo dos argumentos ou o tipo de retorno.

ThreadsafeFunction é um exemplo disso, porque ThreadsafeFunction é muito complexo, o NAPI-RS não pode gerar os tipos TypeScript corretos para ele. Você sempre precisa sobrescrever o tipo de argumento.

ts_args_type

Reescreva o tipo dos argumentos da função e o NAPI-RS colocará o tipo reescrito entre chaves na assinatura da função.

#[napi(ts_args_type="callback: (err: null | Error, result: number) => void")]
fn call_threadsafe_function(callback: JsFunction) -> Result<()> {
  let tsfn: ThreadsafeFunction<u32, ErrorStrategy::CalleeHandled> = callback
    .create_threadsafe_function(0, |ctx| {
      ctx.env.create_uint32(ctx.value + 1).map(|v| vec![v])
    })?;
  for n in 0..100 {
    let tsfn = tsfn.clone();
    thread::spawn(move || {
      tsfn.call(Ok(n), ThreadsafeFunctionCallMode::Blocking);
    });
  }
  Ok(())
}

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

export function callThreadsafeFunction(
  callback: (err: null | Error, result: number) => void,
): void

ts_arg_type

Reescreva um ou mais tipos de argumentos de uma função individualmente, e o NAPI-RS colocará os tipos reescritos entre chaves na assinatura da função e irá derivar automaticamente os outros.

#[napi]
fn override_individual_arg_on_function(
  not_overridden: String,
  #[napi(ts_arg_type = "() => string")] f: JsFunction,
  not_overridden2: u32,
) {
// code ...
}
export function overrideIndividualArgOnFunction(
  notOverridden: string,
  f: () => string,
  notOverridden2: number,
): string

ts_return_type

Reescreva o tipo de retorno da função e o NAPI-RS adicionará o tipo reescrito ao final da assinatura da função.

#[napi(ts_return_type="number")]
fn return_something_unknown(env: Env) -> Result<JsUnknown> {
  env.create_uint32(42).map(|v| v.into_unknown())
}
export function returnSomethingUnknown(): number

ts_type

Sobrescreva o tipo gerado do TypeScript de um campo em uma struct.

#[napi(object)]
pub struct TsTypeChanged {
  #[napi(ts_type = "MySpecialString")]
  pub type_override: String,
 
  #[napi(ts_type = "object")]
  pub type_override_optional: Option<String>,
}
export interface TsTypeChanged {
  typeOverride: MySpecialString
  typeOverrideOptional?: object
}