Skip to content

Commit 55388d1

Browse files
author
Arthur Ozga
committed
Readonly type literal members
1 parent 7e25179 commit 55388d1

File tree

3 files changed

+14
-7
lines changed

3 files changed

+14
-7
lines changed

src/compiler/checker.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2602,14 +2602,17 @@ namespace ts {
26022602
}
26032603
}
26042604
else {
2605-
26062605
// TODO(aozgaa): should we create a node with explicit or implict any?
26072606
const propertyTypeNode = propertyType ? typeToTypeNodeHelper(propertyType, context) : createKeywordTypeNode(SyntaxKind.AnyKeyword);
2608-
typeElements.push(createPropertySignature(
2607+
2608+
const modifiers = isReadonlySymbol(propertySymbol) ? [createToken(SyntaxKind.ReadonlyKeyword)] : undefined;
2609+
const propertySignature = createPropertySignature(
2610+
modifiers,
26092611
propertyName,
26102612
optionalToken,
26112613
propertyTypeNode,
2612-
/*initializer*/undefined));
2614+
/*initializer*/undefined);
2615+
typeElements.push(propertySignature);
26132616
}
26142617
}
26152618
return typeElements.length ? typeElements : undefined;

src/compiler/factory.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -480,21 +480,23 @@ namespace ts {
480480

481481
// Signature elements
482482

483-
export function createPropertySignature(name: PropertyName | string, questionToken: QuestionToken | undefined, type: TypeNode | undefined, initializer: Expression | undefined): PropertySignature {
483+
export function createPropertySignature(modifiers: Modifier[] | undefined, name: PropertyName | string, questionToken: QuestionToken | undefined, type: TypeNode | undefined, initializer: Expression | undefined): PropertySignature {
484484
const propertySignature = createSynthesizedNode(SyntaxKind.PropertySignature) as PropertySignature;
485+
propertySignature.modifiers = asNodeArray(modifiers);
485486
propertySignature.name = asName(name);
486487
propertySignature.questionToken = questionToken;
487488
propertySignature.type = type;
488489
propertySignature.initializer = initializer;
489490
return propertySignature;
490491
}
491492

492-
export function updatePropertySignature(node: PropertySignature, name: PropertyName, questionToken: QuestionToken | undefined, type: TypeNode | undefined, initializer: Expression | undefined) {
493-
return node.name !== name
493+
export function updatePropertySignature(node: PropertySignature, modifiers: Modifier[] | undefined, name: PropertyName, questionToken: QuestionToken | undefined, type: TypeNode | undefined, initializer: Expression | undefined) {
494+
return node.modifiers !== modifiers
495+
|| node.name !== name
494496
|| node.questionToken !== questionToken
495497
|| node.type !== type
496498
|| node.initializer !== initializer
497-
? updateNode(createPropertySignature(name, questionToken, type, initializer), node)
499+
? updateNode(createPropertySignature(modifiers, name, questionToken, type, initializer), node)
498500
: node;
499501
}
500502

src/compiler/visitor.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,8 @@ namespace ts {
355355

356356
case SyntaxKind.PropertySignature:
357357
return updatePropertySignature((<PropertySignature>node),
358+
// TODO: tokenVisitor or visitor for a nodearray of tokens?
359+
nodesVisitor((<PropertySignature>node).modifiers, visitor, isToken),
358360
visitNode((<PropertySignature>node).name, visitor, isPropertyName),
359361
visitNode((<PropertySignature>node).questionToken, tokenVisitor, isToken),
360362
visitNode((<PropertySignature>node).type, visitor, isTypeNode),

0 commit comments

Comments
 (0)