TypeScript 参数装饰器在setter中的语法是否有效?

p1iqtdky  于 3个月前  发布在  TypeScript
关注(0)|答案(5)|浏览(49)

TypeScript版本: 4.0.5
搜索词:

参数装饰器,setter

代码

class A {
    set c(@log('c1') c1: string) {}
}

预期行为:

抛出错误。

实际行为:

现在没有错误了,但执行了一些奇怪的行为。请查看 playground。

Playground链接:

https://www.typescriptlang.org/play?#code/GYVwdgxgLglg9mABAGzgcwBQGcoCcBciOuMYaAlIgN4BQi9iuAplCLkqJLAohlAIa40LQgHkARgCsm0ADR0GigA644SprigBPANJMthYqTSIAPkS0BbcXGTzFywf0ssNASTAATJgA9C-MC1KWgdECAQsWyYAOlRMYnIFRABfGlSaCGR+LCxEAEFqJMQAemKUdEQoAHcYCCYigAE4jAByfhbExSwWRH4MJvRW-gBGDt7hwzxjYPTFUvKTBDrG5pbxDqLuqERxDHEJoimyGZoi+bA4Bc2eiH7ViFHKB8mSY+pU1KA

相关问题:

woobm2wo

woobm2wo1#

这是否意味着以下测试无效?
TypeScript/tests/cases/compiler/sourceMapValidationDecorators.ts
第51行到第56行 b5b0437
| | setgreetings( |
| | @ParameterDecorator1 |
| | @ParameterDecorator2(90) |
| | greetings: string){ |
| | this.greeting=greetings; |
| | } |
/cc @DanielRosenwasser

cigdeys3

cigdeys32#

需要询问@rbuckton

cgfeq70w

cgfeq70w3#

@RyanCavanaugh 也许在setter上使用装饰器是可以接受的 :)。我发现了这个规范参数-装饰器和注解,但是没有提到setter。

uqjltbpv

uqjltbpv4#

规范没有涵盖这种情况,所以我认为它是不允许的,但它可能不是错误。TS是否完全遵循规范?如果有任何差异是可能的,那么我们可以关闭这个问题。无论如何,来自@rbuckton的答案可以澄清这种情况。

mrwjdhj3

mrwjdhj35#

好的,是否允许。TS中的实现很奇怪,这确实是一个bug。
个人认为,TS可以禁止这种语法或修复这个bug。

相关问题