TypeScript 在使用命名空间导出之前未分配错误

yzckvree  于 4个月前  发布在  TypeScript
关注(0)|答案(5)|浏览(57)

TypeScript版本: 2.6.2
搜索关键词: namespace decorator same class
代码

@C1.Decorator
export class C1{ }
export namespace C1 {
export function Decorator(target: T) { }
}
@C1.Decorator
@C2.Decorator
export class C2 { }

export namespace C2 {
export function Decorator(target: T) { }
}

预期行为: 如果这不是一个特性,那么装饰器应该在运行时定义,或者在编译过程中提供一些警告或错误?
实际行为: 来自命名空间C1的装饰器用于类C1未定义,当用于类C2时,来自C1的装饰器已定义,来自C2的装饰器未定义
**示例链接:**https://www.typescriptlang.org/play/index.html#src=%40C1.Decorator%0D%0Aexport%20class%20C1%7B%20%7D%0D%0Aexport%20namespace%20C1%20%7B%20%0D%0A%20%20export%20function%20Decorator%3CT%3E(target%3A%20T)%20%7B%20%7D%0D%0A%7D%0D%0A%40C1.Decorator%0D%0A%40C2.Decorator%0D%0Aexport%20class%20C2%20%7B%20%7D%0D%0A%0D%0Aexport%20namespace%20C2%20%7B%20%0D%0A%20%20export%20function%20Decorator%3CT%3E(target%3A%20T)%20%7B%20%7D%0D%0A%7D
相关问题: 我未找到任何相关问题

vwhgwdsa

vwhgwdsa1#

看起来我们没有为命名空间中的变量提供在分配之前使用过的错误提示。

console.log(N.x);
namespace N {
    export const x = 0;
}

似乎我们可以做到这一点,所以暂时将其标记为错误。

5gfr0r5j

5gfr0r5j2#

我给出的这个例子,还有一个上下文。当你合并类和命名空间时,ts会强制我在类声明后面加上命名空间。当你发出used-before-assigned警告时,这将完全阻止我的案例。装饰器将不可能在类命名空间中声明并在同一类上使用。我不介意这一点。

thigvfpy

thigvfpy3#

解:由题意,$f(x)=x^{2}+1$,

则$f(-x)=(-x)^{2}+1=x^{2}+1=f(x)$,

故函数f(x)为偶函数。

jljoyd4f

jljoyd4f4#

那样的话,当然可以,我也是这样做的。谢谢你的澄清。

lnlaulya

lnlaulya5#

现在,函数支持在TS中扩展属性(并在JS中已经有一段时间了),那里也有相同的错误报告:

f.p // should have an error here
function f() {}
f.p = { x: "" };
f.p // ok

相关问题