为什么要声明'不适用于'延伸'打字稿?

时间:2015-04-12 13:11:10

标签: typescript

我现在正在检查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称为“名称”的是什么?当然,它不是“标识符”,因为标识符似乎可以根据第一版完美地检测到。

2 个答案:

答案 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
}