Uh oh!
There was an error while loading. Please reload this page.
Improved support for read-only arrays and tuples - #29435
Conversation
| "category": "Error", | ||
| "code": 1353 | ||
| }, | ||
| "'readonly' type modifier is only permitted on array and typle types.": { |
There was a problem hiding this comment.
Typo: typle to tuple.
There was a problem hiding this comment.
Jordi Oliveras Rovira (@j-oliveras) Oops. Thanks!
| } | ||
| else if (node.operator === SyntaxKind.ReadonlyKeyword) { | ||
| if (node.type.kind !== SyntaxKind.ArrayType && node.type.kind !== SyntaxKind.TupleType) { | ||
| return grammarErrorOnFirstToken(node, Diagnostics.readonly_type_modifier_is_only_permitted_on_array_and_typle_types, tokenToString(SyntaxKind.SymbolKeyword)); |
There was a problem hiding this comment.
Add test for this?
| switch (operator) { | ||
| case SyntaxKind.KeyOfKeyword: | ||
| case SyntaxKind.UniqueKeyword: | ||
| case SyntaxKind.ReadonlyKeyword: |
There was a problem hiding this comment.
Think we need test/handling for .d.ts generation and decorator for this new typeNode kind.
Jessica Franco (Jessidhia)
commented
Jan 17, 2019
Does this improved support for readonly arrays mean it's now possible to have readonly array/tuples as the type of a rest argument?
|
Anders Hejlsberg (ahejlsberg)
commented
Jan 17, 2019
@Kovensky Isn't in the PR currently, but I see no reason why we couldn't support it. I will fix it, it's just a minor change. |
Ryan Cavanaugh (RyanCavanaugh)
left a comment
There was a problem hiding this comment.
+1 for .d.ts emit coverage - the only .d.ts currently in this set has semantic errors in its originating file, which makes it shaky at best
Sheetal Nandi (sheetalkamat)
commented
Jan 25, 2019
I think having decorator test is good idea too.. since we normally forget that when we enable new kind of type annotation. |
Ryan Cavanaugh (RyanCavanaugh)
commented
Jan 25, 2019
// @emitDecoratorMetadata: true// @experimentalDecorators: true// @declaration: truedeclareconstsomeDec: any;classA{
@someDecj: readonlystring[];
@someDeck: readonly[string,number];} |
Anton Lobov (zhuravlikjb)
commented
Jan 31, 2019
Is this an intended change that a single 'readonly' is no longer parsed as a type? (This is not a sample from real code, just a test case.) Seems that it is not a serious issue, but would be nice to know if this was planned, as you still may declare a type named 'readonly' but cannot use it anymore. |
Anders Hejlsberg (ahejlsberg)
commented
Jan 31, 2019
Anton Lobov (@zhuravlikjb) No, that was not intended. I will look at getting it fixed. |
Klaus Meinhardt (ajafff)
commented
Feb 4, 2019
Using a version of TypeScript that contains this PR creates declaration files which are not compatible with older versions of TypeScript. In case someone else has the same problem: I created a transformer to downlevel readonly array types in declaration files: https://github.com/ajafff/ts-transform-readonly-array |
falsandtru (falsandtru)
commented
Feb 4, 2019
Anders Hejlsberg (@ahejlsberg) This feature leaved some large bugs (Maybe regression). Please fix them: #29442#29702 |
Anders Hejlsberg (ahejlsberg)
commented
Feb 5, 2019
falsandtru (@falsandtru) Those issues are not related to this PR, but I have a fix in #29740. |
falsandtru (falsandtru)
commented
Feb 5, 2019
Indeed, I thought another PR. Anyway, thanks for fixing. |
Simon Buchan (simonbuchan)
commented
Feb 7, 2019
I assume the extension to |
Felix Becker (felixfbecker)
commented
Mar 9, 2019
Is it still possible to declare a writable property with an immutable array? For example, constructable stylesheets defines element.shadowRoot.adoptedStyleSheets=[...element.shadowRoot.adoptedStyleSheets,styleSheet] |
This PR improves our support for read-only arrays and tuples:
readonlymodifier on array types:readonly T[]corresponds toReadonlyArray<T>(similar to howT[]corresponds toArray<T>).readonlymodifier on tuple types:readonly [T0, T1, ...]correponds to a tuple type that derives fromReadonlyArray<T0 | T1 | ...>and has read-only element positions.+readonlymodifier, read-write array and tuple types are mapped to their read-only form, and when a mapped type specifies a-readonlymodifier, read-only array types and tuples are mapped to their read-write form. This means thatReadonly<T>now produces read-only forms of arrays and tuples.Some examples:
Fixes#26864.
Fixes#28540.
Fixes#28968.