型安全性を備えたTSで次のJSパターンを複製する方法はありますか?Typescriptでプロトタイプレスコンストラクタを実装する方法は?
function InputStream(input) {
var pos = 0, line = 1, col = 0;
return {
next : next,
peek : peek,
eof : eof,
croak : croak,
};
function next() {
var ch = input.charAt(pos++);
if (ch == "\n") line++, col = 0; else col++;
return ch;
}
function peek() {
return input.charAt(pos);
}
function eof() {
return peek() == "";
}
function croak(msg) {
throw new Error(msg + " (" + line + ":" + col + ")");
}
}
私は型ヒントを追加した場合、私はこれを取得: - これまでのところ、とても良い
function InputStream(input: string) {
var pos = 0
var line = 1
var col = 0
return {
next,
peek,
eof,
croak
}
function next(): string {
var ch = input.charAt(pos++);
if (ch == "\n") line++, col = 0; else col++;
return ch;
}
function peek(): string {
return input.charAt(pos);
}
function eof(): boolean {
return peek() == "";
}
function croak(msg):string {
throw new Error(`${msg} (${line}:${col})`);
}
}
TSはそうInputStream
と協力して、返されたオブジェクトのインタフェースを推測しますがタイプセーフであります。
私の問題は、インターフェイスのインスタンスとして引数をタイプヒントする方法がないようですね。
例えば(もちろん)、これは動作しません。
function TokenStream(input: InputStream) {
// ...
}
あらゆるタイプ-ヒントにする方法リターン型InputStream
機能のとしてinput
引数はありますか?
インターフェイスを明示的に宣言していないということは、インターフェイスを推論できることを前提に、冗長であると思われます。
もちろん、実際のクラスに移植することもできますが、これはより正しいと思われますが、code like thisは非常に冗長になります。
おそらくモジュールで同様のことを達成するための他の方法はありますか?私はモジュールがthis
で修飾されずにモジュールで宣言された関数を呼び出すことができ、クラスメソッドと親クラスで可能であることを望んでいることに気付きましたが、TSチームはその要求を断りました。