tact-lang / tact

Tact compiler main repository
https://tact-lang.org
MIT License
267 stars 53 forks source link

`Cell`, `Slice` and `Builder` are treated as `Cell` in generated TS wrappers #414

Open Gusarich opened 4 days ago

Gusarich commented 4 days ago

Each of the below get methods return different type (Cell, Slice and Builder): https://github.com/tact-lang/tact/blob/7afc87e8b24618301af5fdd58dcf7862ee1d5101/src/test/e2e-emulated/contracts/serialization-3.tact#L47-L55

However, after compilation, generated TS wrapper treats all of these values as Cells:

async getGetC(provider: ContractProvider) {
    let builder = new TupleBuilder();
    let source = (await provider.get('getC', builder.build())).stack;
    let result = source.readCell();
    return result;
}

async getGetD(provider: ContractProvider) {
    let builder = new TupleBuilder();
    let source = (await provider.get('getD', builder.build())).stack;
    let result = source.readCell();
    return result;
}

async getGetE(provider: ContractProvider) {
    let builder = new TupleBuilder();
    let source = (await provider.get('getE', builder.build())).stack;
    let result = source.readCell();
    return result;
}

Both Slice and Builder have their own types in TS so they should be used instead.