在存在import语句的情况下扩展Function接口

时间:2015-12-04 10:56:51

标签: typescript

我想扩展Function,这可以很好地编译

interface Function {
    hello(): any
}
Function.prototype.hello = function() {
    console.log('hello world')
}

function noop() {}

noop.hello() //==> 'hello world' in the console

但是,一旦我尝试添加import语句,请说

import { sayHello } from './Anything'

其中Anything仅包含

export function sayHello() { console.log('hello')}

Function.protoype.hello的编辑失败,消息为error TS2339: Property 'hello' does not exist on type 'Function'

为什么?

View in Playground

注意:编译失败,tsc选项设置为--target es5 --module commonjs--target es6

2 个答案:

答案 0 :(得分:0)

这可能是因为编译器并不知道你扩展了基本的函数类型。尝试:

export interface Function {...}

答案 1 :(得分:0)

这里很好的答案:https://github.com/Microsoft/TypeScript/issues/5944

简而言之,在介绍export(或import)时,整个文件被认为是在自己独立的命名空间中:Function现在被评估为本地接口,不再引用全球定义。

我还建议在那里阅读整个讨论:https://github.com/Microsoft/TypeScript/issues/4166