thorvg / thorvg

Thor Vector Graphics is a lightweight portable library used for drawing vector-based scenes and animations including SVG and Lottie. It can be freely utilized across various software platforms and applications to visualize graphical contents.

Home Page:https://www.thorvg.org

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

web: Improve ambiguous WASM type defination

tinyjin opened this issue · comments

As a Type supported web standard component, @thorvg/lottie-player should support the explicit type defination.

lottie-player.ts

There is no module type, the TvgModule is just any type. We have no benefit to take TvgModule.
As we can see in the comment, WASM Glue code didn't have type here. In fact, the Emscripten is able to provide type defination.

// @ts-ignore: WASM Glue code doesn't have type & Only available on build progress
import Module from '../dist/thorvg-wasm';
// ...
type TvgModule = any;

see: https://emscripten.org/docs/porting/connecting_cpp_and_javascript/embind.html#typescript-definitions

tvgWasmLottieAnimation

The emscripten::val is too ambiguous for TypeScript dev. Although the val is flexible and easier to bind, the compiler would map this to TypeScript's any type by default.

TypeScript developer could struggle without type, and emscripten::register_type surely helps this point.

val duration()
{
    if (!canvas || !animation) return val(0);
    return val(animation->duration()); // Actually no-type here
}

see: https://emscripten.org/docs/porting/connecting_cpp_and_javascript/embind.html#custom-val-definitions