我现在正在检查Typescript,偶然发现了一件奇怪的事情。我默认使用npm
安装'typescript@1.5.0-alpha'。如果我有一个代码declare
是一个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称为“名称”的是什么?当然,它不是“标识符”,因为标识符似乎可以根据第一版完美地检测到。
答案 0 :(得分:1)
..我怎样才能指示
TypeScript
那个标识符" a"实际上是指类,而打字稿只需要生成扩展代码,假设它在这里。在第三方缩小的lib中定义。在没有描述它的内部结构的情况下,是否可以向前宣告它?它的原型是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
});
答案 1 :(得分:0)
您希望扩展一个类,不一个对象实例。
class A
{
// stuff
}
class B extends A
{
// stuff
}