thorvg / thorvg.web

ThorVG for Web System
https://www.thorvg.org
MIT License
3 stars 1 forks source link

Improve ambiguous WASM type defination #16

Open hermet opened 1 month ago

hermet commented 1 month ago

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