私は今Typescriptを調べていて、奇妙なことに出くわしました。npm
デフォルトでインストールされている「[email protected]」を使用しています。declare
'sa varのコードがあり、それを割り当てに使用する場合、すべて正常に機能します。
.ts
declare var a;
var b = a;
.js
var b = a;
しかし、変数を宣言してからクラスを拡張しようとすると(変数が有効なtypescriptクラス識別子であると仮定して)、typescriptが失敗し、「name」が見つからないという奇妙なエラーが発生します。
.ts
declare var a;
class b extends a {}
エラー
test.ts(2,17): error TS2304: Cannot find name 'a'.
これが発生する理由と、TypeScriptが「名前」と呼ぶものについてのヒントはありますか?最初のバージョンでは識別子が完全に検出されているように見えるので、間違いなく「識別子」ではありません。
..
TypeScript
識別子「a」が実際にクラスを参照していることをどのように指示できますか。typescriptは、ここにあると仮定して拡張コードを生成する必要があります。サードパーティの縮小ライブラリで定義されています。内部構造を記述せずに前方宣言する方法はありますか?プロトタイプはnode.js
event.EventEmitter
私は最新のTypeScript
コンパイラをハックしてあなたが望むことをする方法を知りません、そしてあなたの問題の説明から私は実際にあなたが望むことを理解していませんでした...
...しかし、サードパーティのライブラリでevent.EventEmitter
型、特に変数型を宣言する必要性に遭遇しました。私は、interface
どのコピー/貼り付けが内部構造の重要なメンバーを記述しているかを宣言することによって、この必要性を回避しました。
TODO
その時点でより良い解決策を見つけることができなかったので、それはマークされていますが、あなたの場合にも回避策として機能する可能性があります
interfaces.d.ts
/// <reference path="../../vendor/borisyankov/DefinitelyTyped/node/node.d.ts"/>
interface IChildProcess /* TODO: should be "extends child_process.ChildProcess" */ {
stdin: NodeJS.WritableStream;
stdout: NodeJS.ReadableStream;
stderr: NodeJS.ReadableStream;
pid: number;
on(event: string, listener: Function): NodeJS.EventEmitter;
}
some.ts
var process: IChildProcess;
process = child_process.spawn("cmd.exe", args, {
cwd: options.cwd || process.cwd(),
stdio: options.stdio || 'inherit',
env: process.env,
detached: false
});
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加