Assemblyscript: ジェネリック型で静的関数を呼び出すことは可能ですか<t>?</t>

作成日 2019年03月15日  ·  3コメント  ·  ソース: AssemblyScript/assemblyscript

例:

class Temp {
  static decode(buf: Uint8Array): Temp {
    return new Temp(); 
  }
}

function decode<T>(buf: Uint8Array): T {
  return T.decode(buf);
}

let a = decode<Temp>(new Uint8Array());
question

最も参考になるコメント

いいえ、これもtypescriptでは不可能です。
しかし、あなたは次のようなことをすることができます:

class Base {
  static decode<T>(buf: Uint8Array): T {
    return instantiate<T>(); // `instantiate` is AssemblyScript's builtin
  }
}

class Temp extends Base {
}

let a = Base.decode<Temp>(new Uint8Array(1));

全てのコメント3件

いいえ、これもtypescriptでは不可能です。
しかし、あなたは次のようなことをすることができます:

class Base {
  static decode<T>(buf: Uint8Array): T {
    return instantiate<T>(); // `instantiate` is AssemblyScript's builtin
  }
}

class Temp extends Base {
}

let a = Base.decode<Temp>(new Uint8Array(1));

出力が参照であることがわかっている場合は、次のようにchangetypeマクロを使用できます。

changetype<T>(changetype<usize>(T.decode(buf)));

デコード関数の出力がTデータ型の定義と一致することを確認する責任があります。

これは安全ではありません。何をしているのかを知る必要があります。

ありがとう

このページは役に立ちましたか?
0 / 5 - 0 評価