From 891e71d44f888a2afdb563a40ec6f4527fd0c01d Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Fri, 22 Sep 2017 15:08:55 -0700 Subject: [PATCH] Remove freshness, more comprehensive grammar checks and diagnostic messages --- src/compiler/checker.ts | 349 ++++++++------- src/compiler/declarationEmitter.ts | 2 +- src/compiler/diagnosticMessages.json | 50 ++- src/compiler/emitter.ts | 2 +- src/compiler/factory.ts | 4 + src/compiler/parser.ts | 2 +- src/compiler/types.ts | 30 +- src/compiler/utilities.ts | 5 + ...pturedParametersInInitializers2.errors.txt | 4 +- .../classWithDuplicateIdentifier.errors.txt | 4 +- .../reference/complicatedPrivacy.errors.txt | 4 +- .../computedPropertyNames12_ES5.errors.txt | 36 +- .../computedPropertyNames12_ES6.errors.txt | 36 +- .../computedPropertyNames35_ES5.errors.txt | 4 +- .../computedPropertyNames35_ES6.errors.txt | 4 +- ...opertyNamesDeclarationEmit3_ES5.errors.txt | 4 +- ...opertyNamesDeclarationEmit3_ES6.errors.txt | 4 +- ...opertyNamesDeclarationEmit4_ES5.errors.txt | 4 +- ...opertyNamesDeclarationEmit4_ES6.errors.txt | 4 +- ...tedPropertyNamesOnOverloads_ES5.errors.txt | 8 +- ...tedPropertyNamesOnOverloads_ES6.errors.txt | 8 +- .../duplicateClassElements.errors.txt | 4 +- tests/baselines/reference/dynamicNames.js | 4 +- .../baselines/reference/dynamicNames.symbols | 18 +- tests/baselines/reference/dynamicNames.types | 50 ++- .../reference/dynamicNamesErrors.errors.txt | 12 +- .../gettersAndSettersErrors.errors.txt | 4 +- tests/baselines/reference/giant.errors.txt | 32 +- ...SignatureMustHaveTypeAnnotation.errors.txt | 8 +- .../indexSignatureWithInitializer.errors.txt | 8 +- .../indexWithoutParamType2.errors.txt | 4 +- .../interfaceDeclaration1.errors.txt | 4 +- ...cesWithConflictingPropertyNames.errors.txt | 12 +- ...cStringNamedPropertyEquivalence.errors.txt | 4 +- .../parserComputedPropertyName10.errors.txt | 4 +- .../parserComputedPropertyName11.errors.txt | 4 +- .../parserComputedPropertyName13.errors.txt | 4 +- .../parserComputedPropertyName14.errors.txt | 4 +- .../parserComputedPropertyName15.errors.txt | 4 +- .../parserComputedPropertyName18.errors.txt | 4 +- .../parserComputedPropertyName19.errors.txt | 4 +- .../parserComputedPropertyName20.errors.txt | 4 +- .../parserComputedPropertyName21.errors.txt | 4 +- .../parserComputedPropertyName22.errors.txt | 4 +- .../parserComputedPropertyName25.errors.txt | 4 +- .../parserComputedPropertyName28.errors.txt | 8 +- .../parserComputedPropertyName29.errors.txt | 8 +- .../parserComputedPropertyName31.errors.txt | 8 +- .../parserComputedPropertyName32.errors.txt | 4 +- .../parserComputedPropertyName36.errors.txt | 4 +- .../parserComputedPropertyName7.errors.txt | 4 +- .../parserComputedPropertyName8.errors.txt | 4 +- .../parserComputedPropertyName9.errors.txt | 4 +- .../parserES5ComputedPropertyName1.errors.txt | 4 +- ...parserES5ComputedPropertyName10.errors.txt | 4 +- ...parserES5ComputedPropertyName11.errors.txt | 4 +- .../parserES5ComputedPropertyName5.errors.txt | 4 +- .../parserES5ComputedPropertyName7.errors.txt | 4 +- .../parserES5ComputedPropertyName8.errors.txt | 4 +- .../parserES5ComputedPropertyName9.errors.txt | 4 +- .../parserIndexSignature11.errors.txt | 4 +- .../parserIndexSignature4.errors.txt | 4 +- .../parserIndexSignature5.errors.txt | 4 +- .../reference/propertyAssignment.errors.txt | 4 +- .../reference/reassignStaticProp.errors.txt | 4 +- .../reference/symbolProperty7.errors.txt | 8 +- tests/baselines/reference/uniqueSymbols.js | 275 ++++++++++++ .../baselines/reference/uniqueSymbols.symbols | 398 +++++++++++++++++ tests/baselines/reference/uniqueSymbols.types | 416 ++++++++++++++++++ .../reference/uniqueSymbolsErrors.errors.txt | 265 +++++++++++ .../reference/uniqueSymbolsErrors.js | 110 +++++ tests/cases/compiler/dynamicNames.ts | 4 +- .../types/uniqueSymbol/uniqueSymbols.ts | 117 +++++ .../types/uniqueSymbol/uniqueSymbolsErrors.ts | 86 ++++ 74 files changed, 2156 insertions(+), 391 deletions(-) create mode 100644 tests/baselines/reference/uniqueSymbols.js create mode 100644 tests/baselines/reference/uniqueSymbols.symbols create mode 100644 tests/baselines/reference/uniqueSymbols.types create mode 100644 tests/baselines/reference/uniqueSymbolsErrors.errors.txt create mode 100644 tests/baselines/reference/uniqueSymbolsErrors.js create mode 100644 tests/cases/conformance/types/uniqueSymbol/uniqueSymbols.ts create mode 100644 tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index f2504043566..d4baf3fe671 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -630,6 +630,15 @@ namespace ts { } } + function combineSymbolTables(first: SymbolTable | undefined, second: SymbolTable | undefined): SymbolTable | undefined { + if (!first || first.size === 0) return second; + if (!second || second.size === 0) return first; + const combined = createSymbolTable(); + mergeSymbolTable(combined, first); + mergeSymbolTable(combined, second); + return combined; + } + function mergeSymbolTable(target: SymbolTable, source: SymbolTable) { source.forEach((sourceSymbol, id) => { let targetSymbol = target.get(id); @@ -751,7 +760,7 @@ namespace ts { const classDeclaration = parameter.parent.parent; const parameterSymbol = getSymbol(constructorDeclaration.locals, parameterName, SymbolFlags.Value); - const propertySymbol = getSymbol(classDeclaration.symbol.members, parameterName, SymbolFlags.Value); + const propertySymbol = getSymbol(getMembersOfSymbol(classDeclaration.symbol), parameterName, SymbolFlags.Value); if (parameterSymbol && propertySymbol) { return [parameterSymbol, propertySymbol]; @@ -2479,10 +2488,8 @@ namespace ts { if (type.flags & TypeFlags.BooleanLiteral) { return (type).intrinsicName === "true" ? createTrue() : createFalse(); } - if (type.flags & TypeFlags.Unique) { - return type.flags & TypeFlags.Fresh - ? createToken(SyntaxKind.SymbolType) - : createTypeQueryNodeFromSymbol(type.symbol, SymbolFlags.Value); + if (type.flags & TypeFlags.UniqueESSymbol) { + return createESSymbolTypeNode(); } if (type.flags & TypeFlags.Void) { return createKeywordTypeNode(SyntaxKind.VoidKeyword); @@ -3297,15 +3304,10 @@ namespace ts { else if (getObjectFlags(type) & (ObjectFlags.Anonymous | ObjectFlags.Mapped)) { writeAnonymousType(type, nextFlags); } - else if (type.flags & TypeFlags.Unique) { - if (type.flags & TypeFlags.Fresh) { - writeKeyword(writer, SyntaxKind.SymbolKeyword); - writePunctuation(writer, SyntaxKind.OpenParenToken); - writePunctuation(writer, SyntaxKind.CloseParenToken); - } - else { - writeTypeOfSymbol(type.symbol, flags); - } + else if (type.flags & TypeFlags.UniqueESSymbol) { + writeKeyword(writer, SyntaxKind.SymbolKeyword); + writePunctuation(writer, SyntaxKind.OpenParenToken); + writePunctuation(writer, SyntaxKind.CloseParenToken); } else if (type.flags & TypeFlags.StringOrNumberLiteral) { writer.writeStringLiteral(literalTypeToString(type)); @@ -4522,6 +4524,12 @@ namespace ts { if (reportErrors) { reportErrorsFromWidening(declaration, type); } + + // always widen a unique 'symbol()' type if the type was created for a different declaration. + if (type.flags & TypeFlags.UniqueESSymbol && !declaration.type && type.symbol !== getSymbolOfNode(declaration)) { + type = esSymbolType; + } + // During a normal type check we'll never get to here with a property assignment (the check of the containing // object literal uses a different path). We exclude widening only so that language services and type verification // tools see the actual type. @@ -4590,16 +4598,6 @@ namespace ts { if (!popTypeResolution()) { type = reportCircularityError(symbol); } - - // If the type is a fresh, unique symbol type and is not the type for this symbol, get its regular type - // For example: - // - // const x = Symbol(); // fresh type, e.g. 'symbol()' - // const y = x; // regular type, e.g. 'typeof x' - if (type.flags & TypeFlags.Unique && type.flags & TypeFlags.Fresh && type.symbol !== symbol) { - type = (type).regularType; - } - links.type = type; } return links.type; @@ -5417,9 +5415,10 @@ namespace ts { function resolveDeclaredMembers(type: InterfaceType): InterfaceTypeWithDeclaredMembers { if (!(type).declaredProperties) { const symbol = type.symbol; + const members = getMembersOfSymbol(symbol); (type).declaredProperties = getNamedMembers(getMembersOfSymbol(symbol)); - (type).declaredCallSignatures = getSignaturesOfSymbol(symbol.members.get(InternalSymbolName.Call)); - (type).declaredConstructSignatures = getSignaturesOfSymbol(symbol.members.get(InternalSymbolName.New)); + (type).declaredCallSignatures = getSignaturesOfSymbol(members.get(InternalSymbolName.Call)); + (type).declaredConstructSignatures = getSignaturesOfSymbol(members.get(InternalSymbolName.New)); (type).declaredStringIndexInfo = getIndexInfoOfSymbol(symbol, IndexKind.String); (type).declaredNumberIndexInfo = getIndexInfoOfSymbol(symbol, IndexKind.Number); } @@ -5439,16 +5438,7 @@ namespace ts { lateBindMembers(lateMembers, decl); } } - if (!lateMembers || lateMembers.size === 0) { - return links.resolvedMembers = symbol.members || emptySymbols; - } - if (!symbol.members || symbol.members.size === 0) { - return links.resolvedMembers = lateMembers; - } - const resolvedMembers = createUnderscoreEscapedMap(); - mergeSymbolTable(resolvedMembers, symbol.members); - mergeSymbolTable(resolvedMembers, lateMembers); - return links.resolvedMembers = resolvedMembers; + links.resolvedMembers = combineSymbolTables(symbol.members, lateMembers) || emptySymbols; } return links.resolvedMembers; } @@ -5456,7 +5446,7 @@ namespace ts { /** * Gets the late-bound members of a symbol. */ - function getLateBoundMembersOfSymbol(symbol: Symbol) { + function getLateBoundMembersOfSymbol(symbol: Symbol): UnderscoreEscapedMap | undefined { if (symbol.flags & (SymbolFlags.Class | SymbolFlags.Interface | SymbolFlags.TypeLiteral | SymbolFlags.ObjectLiteral)) { const links = getSymbolLinks(symbol); return links.lateMembers || (links.lateMembers = createUnderscoreEscapedMap()); @@ -5477,7 +5467,11 @@ namespace ts { function isLateBoundName(node: DeclarationName): node is LateBoundName { return isComputedPropertyName(node) && isEntityNameExpression(node.expression) - && (checkComputedPropertyName(node).flags & TypeFlags.StringOrNumberLiteralOrUnique) !== 0; + && isLateBoundNameType(checkComputedPropertyName(node)); + } + + function isLateBoundNameType(type: Type): type is LiteralType | UniqueESSymbolType { + return !!(type.flags & TypeFlags.StringOrNumberLiteralOrUnique); } /** @@ -5511,8 +5505,8 @@ namespace ts { /** * Gets the symbolic name for a late-bound member from its type. */ - function getLateBoundNameFromType(type: Type) { - if (type.flags & TypeFlags.Unique) { + function getLateBoundNameFromType(type: LiteralType | UniqueESSymbolType) { + if (type.flags & TypeFlags.UniqueESSymbol) { return `__@${type.symbol.escapedName}@${getSymbolId(type.symbol)}` as __String; } if (type.flags & TypeFlags.StringOrNumberLiteral) { @@ -5552,7 +5546,7 @@ namespace ts { const memberSymbol = member.symbol; links.resolvedSymbol = memberSymbol || unknownSymbol; const type = checkComputedPropertyName(member.name); - if (type.flags & TypeFlags.StringOrNumberLiteralOrUnique) { + if (isLateBoundNameType(type)) { const memberName = getLateBoundNameFromType(type); let symbol = lateMembers.get(memberName); if (!symbol) { @@ -5633,7 +5627,7 @@ namespace ts { } const baseTypes = getBaseTypes(source); if (baseTypes.length) { - if (source.symbol && members === source.symbol.members) { + if (source.symbol && members === getMembersOfSymbol(source.symbol)) { members = createSymbolTable(source.declaredProperties); } const thisArgument = lastOrUndefined(typeArguments); @@ -7464,7 +7458,7 @@ namespace ts { containsString?: boolean; containsNumber?: boolean; containsESSymbol?: boolean; - containsStringOrNumberLiteralOrUnique?: boolean; + containsStringOrNumberLiteralOrUniqueESSymbol?: boolean; containsObjectType?: boolean; containsEmptyObject?: boolean; unionIndex?: number; @@ -7531,7 +7525,7 @@ namespace ts { if (flags & TypeFlags.String) typeSet.containsString = true; if (flags & TypeFlags.Number) typeSet.containsNumber = true; if (flags & TypeFlags.ESSymbol) typeSet.containsESSymbol = true; - if (flags & TypeFlags.StringOrNumberLiteralOrUnique) typeSet.containsStringOrNumberLiteralOrUnique = true; + if (flags & TypeFlags.StringOrNumberLiteralOrUnique) typeSet.containsStringOrNumberLiteralOrUniqueESSymbol = true; const len = typeSet.length; const index = len && type.id > typeSet[len - 1].id ? ~len : binarySearchTypes(typeSet, type); if (index < 0) { @@ -7606,8 +7600,8 @@ namespace ts { const remove = t.flags & TypeFlags.StringLiteral && types.containsString || t.flags & TypeFlags.NumberLiteral && types.containsNumber || - t.flags & TypeFlags.Unique && types.containsESSymbol || - t.flags & TypeFlags.StringOrNumberLiteralOrUnique && t.flags & TypeFlags.Fresh && containsType(types, getRegularTypeOfLiteralOrUniqueType(t)); + t.flags & TypeFlags.UniqueESSymbol && types.containsESSymbol || + t.flags & TypeFlags.StringOrNumberLiteral && t.flags & TypeFlags.FreshLiteral && containsType(types, (t).regularType); if (remove) { orderedRemoveItemAt(types, i); } @@ -7636,7 +7630,7 @@ namespace ts { if (subtypeReduction) { removeSubtypes(typeSet); } - else if (typeSet.containsStringOrNumberLiteralOrUnique) { + else if (typeSet.containsStringOrNumberLiteralOrUniqueESSymbol) { removeRedundantLiteralTypes(typeSet); } if (typeSet.length === 0) { @@ -7823,8 +7817,7 @@ namespace ts { function getPropertyTypeForIndexType(objectType: Type, indexType: Type, accessNode: ElementAccessExpression | IndexedAccessTypeNode, cacheSymbol: boolean) { const accessExpression = accessNode && accessNode.kind === SyntaxKind.ElementAccessExpression ? accessNode : undefined; - const propName = indexType.flags & TypeFlags.StringOrNumberLiteralOrUnique ? - getLateBoundNameFromType(indexType) : + const propName = isLateBoundNameType(indexType) ? getLateBoundNameFromType(indexType) : accessExpression && checkThatExpressionIsProperSymbolReference(accessExpression.argumentExpression, indexType, /*reportError*/ false) ? getPropertyNameForKnownSymbolName(unescapeLeadingUnderscores(((accessExpression.argumentExpression).name).escapedText)) : undefined; @@ -8137,22 +8130,20 @@ namespace ts { return type; } - function getFreshTypeOfLiteralOrUniqueType(type: Type) { - if (type.flags & TypeFlags.StringOrNumberLiteralOrUnique && !(type.flags & TypeFlags.Fresh)) { - if (!(type).freshType) { - const freshType = type.flags & TypeFlags.Unique - ? createUniqueType(type.symbol, TypeFlags.Fresh) - : createLiteralType(type.flags | TypeFlags.Fresh, (type).value, (type).symbol); - freshType.regularType = type; - (type).freshType = freshType; + function getFreshTypeOfLiteralType(type: Type) { + if (type.flags & TypeFlags.StringOrNumberLiteral && !(type.flags & TypeFlags.FreshLiteral)) { + if (!(type).freshType) { + const freshType = createLiteralType(type.flags | TypeFlags.FreshLiteral, (type).value, (type).symbol); + freshType.regularType = type; + (type).freshType = freshType; } - return (type).freshType; + return (type).freshType; } return type; } - function getRegularTypeOfLiteralOrUniqueType(type: Type) { - return type.flags & TypeFlags.StringOrNumberLiteralOrUnique && type.flags & TypeFlags.Fresh ? (type).regularType : type; + function getRegularTypeOfLiteralType(type: Type) { + return type.flags & TypeFlags.StringOrNumberLiteral && type.flags & TypeFlags.FreshLiteral ? (type).regularType : type; } function getLiteralType(value: string | number, enumId?: number, symbol?: Symbol) { @@ -8173,36 +8164,63 @@ namespace ts { function getTypeFromLiteralTypeNode(node: LiteralTypeNode): Type { const links = getNodeLinks(node); if (!links.resolvedType) { - links.resolvedType = getRegularTypeOfLiteralOrUniqueType(checkExpression(node.literal)); + links.resolvedType = getRegularTypeOfLiteralType(checkExpression(node.literal)); } return links.resolvedType; } - function getTypeFromSymbolTypeNode(node: SymbolTypeNode): Type { - const parent = node.parent; - if (parent.kind === SyntaxKind.VariableDeclaration || - parent.kind === SyntaxKind.PropertyDeclaration || - parent.kind === SyntaxKind.PropertySignature || - parent.kind === SyntaxKind.PropertyAssignment) { - const symbol = getSymbolOfNode(parent); - if (symbol) return getUniqueTypeForSymbol(symbol); - } - return esSymbolType; + function getWidenedTypeOfUniqueESSymbolType(type: Type): Type { + return type.flags & TypeFlags.UniqueESSymbol ? esSymbolType : + type.flags & TypeFlags.Union ? getUnionType(sameMap((type).types, getWidenedTypeOfUniqueESSymbolType)) : + type.flags & TypeFlags.Intersection ? getIntersectionType(sameMap((type).types, getWidenedTypeOfUniqueESSymbolType)) : + type; } - function getRegularTypeOfUniqueType(type: Type) { - return type.flags & TypeFlags.Unique && type.flags & TypeFlags.Fresh ? (type).regularType : type; - } - - function createUniqueType(symbol: Symbol, flags?: TypeFlags) { - const type = createType(TypeFlags.Unique | flags); + function createUniqueESSymbolType(symbol: Symbol) { + const type = createType(TypeFlags.UniqueESSymbol); type.symbol = symbol; return type; } - function getUniqueTypeForSymbol(symbol: Symbol) { - const links = getSymbolLinks(symbol); - return links.type || (links.type = createUniqueType(symbol)); + function isReferenceToValidDeclarationForUniqueESSymbol(symbol: Symbol) { + if (symbol.valueDeclaration) { + switch (symbol.valueDeclaration.kind) { + case SyntaxKind.VariableDeclaration: + return getNameOfDeclaration(symbol.valueDeclaration).kind === SyntaxKind.Identifier + && symbol.valueDeclaration.parent.kind === SyntaxKind.VariableDeclarationList + && symbol.valueDeclaration.parent.parent.kind === SyntaxKind.VariableStatement + && !!(symbol.valueDeclaration.parent.flags & NodeFlags.Const); + case SyntaxKind.PropertySignature: + return hasModifier(symbol.valueDeclaration, ModifierFlags.Readonly); + case SyntaxKind.PropertyDeclaration: + return hasModifier(symbol.valueDeclaration, ModifierFlags.Readonly) + && hasModifier(symbol.valueDeclaration, ModifierFlags.Static); + } + } + return false; + } + + function getUniqueESSymbolTypeForSymbol(symbol: Symbol) { + if (isReferenceToValidDeclarationForUniqueESSymbol(symbol)) { + const links = getSymbolLinks(symbol); + return links.type || (links.type = createUniqueESSymbolType(symbol)); + } + return esSymbolType; + } + + function getTypeFromESSymbolTypeNode(node: ESSymbolTypeNode): Type { + const links = getNodeLinks(node); + if (!links.resolvedType) { + const parent = skipParentheses(node).parent; + const symbol = getSymbolOfNode(parent); + if (symbol) { + links.resolvedType = getUniqueESSymbolTypeForSymbol(symbol); + } + else { + links.resolvedType = esSymbolType; + } + } + return links.resolvedType; } function getTypeFromJSDocVariadicType(node: JSDocVariadicType): Type { @@ -8264,8 +8282,8 @@ namespace ts { return getTypeFromThisTypeNode(node as ThisExpression | ThisTypeNode); case SyntaxKind.LiteralType: return getTypeFromLiteralTypeNode(node); - case SyntaxKind.SymbolType: - return getTypeFromSymbolTypeNode(node); + case SyntaxKind.ESSymbolType: + return getTypeFromESSymbolTypeNode(node); case SyntaxKind.TypeReference: return getTypeFromTypeReference(node); case SyntaxKind.TypePredicate: @@ -9003,7 +9021,7 @@ namespace ts { if (s & TypeFlags.Undefined && (!strictNullChecks || t & (TypeFlags.Undefined | TypeFlags.Void))) return true; if (s & TypeFlags.Null && (!strictNullChecks || t & TypeFlags.Null)) return true; if (s & TypeFlags.Object && t & TypeFlags.NonPrimitive) return true; - if (s & TypeFlags.Unique || t & TypeFlags.Unique) return false; + if (s & TypeFlags.UniqueESSymbol || t & TypeFlags.UniqueESSymbol) return false; if (relation === assignableRelation || relation === comparableRelation) { if (s & TypeFlags.Any) return true; // Type number or any numeric literal type is assignable to any numeric enum type or any @@ -9016,8 +9034,8 @@ namespace ts { } function isTypeRelatedTo(source: Type, target: Type, relation: Map) { - source = getRegularTypeOfLiteralOrUniqueType(source); - target = getRegularTypeOfLiteralOrUniqueType(target); + source = getRegularTypeOfLiteralType(source); + target = getRegularTypeOfLiteralType(target); if (source === target || relation !== identityRelation && isSimpleTypeRelatedTo(source, target, relation)) { return true; } @@ -9148,8 +9166,8 @@ namespace ts { * * Ternary.False if they are not related. */ function isRelatedTo(source: Type, target: Type, reportErrors?: boolean, headMessage?: DiagnosticMessage): Ternary { - source = getRegularTypeOfLiteralOrUniqueType(source); - target = getRegularTypeOfLiteralOrUniqueType(target); + source = getRegularTypeOfLiteralType(source); + target = getRegularTypeOfLiteralType(target); // both types are the same - covers 'they are the same primitive type or both are Any' or the same type parameter cases if (source === target) return Ternary.True; @@ -9159,7 +9177,7 @@ namespace ts { if (isSimpleTypeRelatedTo(source, target, relation, reportErrors ? reportError : undefined)) return Ternary.True; - if (getObjectFlags(source) & ObjectFlags.ObjectLiteral && source.flags & TypeFlags.Fresh) { + if (getObjectFlags(source) & ObjectFlags.ObjectLiteral && source.flags & TypeFlags.FreshLiteral) { if (hasExcessProperties(source, target, reportErrors)) { if (reportErrors) { reportRelationError(headMessage, source, target); @@ -10315,9 +10333,8 @@ namespace ts { function getWidenedLiteralType(type: Type): Type { return type.flags & TypeFlags.EnumLiteral ? getBaseTypeOfEnumLiteralType(type) : - type.flags & TypeFlags.StringLiteral && type.flags & TypeFlags.Fresh ? stringType : - type.flags & TypeFlags.NumberLiteral && type.flags & TypeFlags.Fresh ? numberType : - type.flags & TypeFlags.Unique && type.flags & TypeFlags.Fresh ? esSymbolType : + type.flags & TypeFlags.StringLiteral && type.flags & TypeFlags.FreshLiteral ? stringType : + type.flags & TypeFlags.NumberLiteral && type.flags & TypeFlags.FreshLiteral ? numberType : type.flags & TypeFlags.BooleanLiteral ? booleanType : type.flags & TypeFlags.Union ? getUnionType(sameMap((type).types, getWidenedLiteralType)) : type; @@ -10425,7 +10442,7 @@ namespace ts { * Leave signatures alone since they are not subject to the check. */ function getRegularTypeOfObjectLiteral(type: Type): Type { - if (!(getObjectFlags(type) & ObjectFlags.ObjectLiteral && type.flags & TypeFlags.Fresh)) { + if (!(getObjectFlags(type) & ObjectFlags.ObjectLiteral && type.flags & TypeFlags.FreshLiteral)) { return type; } const regularType = (type).regularType; @@ -10441,7 +10458,7 @@ namespace ts { resolved.constructSignatures, resolved.stringIndexInfo, resolved.numberIndexInfo); - regularNew.flags = resolved.flags & ~TypeFlags.Fresh; + regularNew.flags = resolved.flags & ~TypeFlags.FreshLiteral; regularNew.objectFlags |= ObjectFlags.ObjectLiteral; (type).regularType = regularNew; return regularNew; @@ -11067,7 +11084,7 @@ namespace ts { } } } - return inferredType; + return getWidenedTypeOfUniqueESSymbolType(inferredType); } function getDefaultTypeArgumentType(isInJavaScriptFile: boolean): Type { @@ -11515,7 +11532,7 @@ namespace ts { function getTypeOfSwitchClause(clause: CaseClause | DefaultClause) { if (clause.kind === SyntaxKind.CaseClause) { - const caseType = getRegularTypeOfLiteralOrUniqueType(getTypeOfExpression((clause).expression)); + const caseType = getRegularTypeOfLiteralType(getTypeOfExpression((clause).expression)); return isUnitType(caseType) ? caseType : undefined; } return neverType; @@ -12160,8 +12177,8 @@ namespace ts { return narrowedType.flags & TypeFlags.Never ? type : replacePrimitivesWithLiterals(narrowedType, valueType); } if (isUnitType(valueType)) { - const regularType = getRegularTypeOfLiteralOrUniqueType(valueType); - return filterType(type, t => getRegularTypeOfLiteralOrUniqueType(t) !== regularType); + const regularType = getRegularTypeOfLiteralType(valueType); + return filterType(type, t => getRegularTypeOfLiteralType(t) !== regularType); } return type; } @@ -12218,7 +12235,7 @@ namespace ts { if (!hasDefaultClause) { return caseType; } - const defaultType = filterType(type, t => !(isUnitType(t) && contains(switchTypes, getRegularTypeOfLiteralOrUniqueType(t)))); + const defaultType = filterType(type, t => !(isUnitType(t) && contains(switchTypes, getRegularTypeOfLiteralType(t)))); return caseType.flags & TypeFlags.Never ? defaultType : getUnionType([caseType, defaultType]); } @@ -13700,7 +13717,7 @@ namespace ts { else { const elementContextualType = getContextualTypeForElementExpression(contextualType, index); const type = checkExpressionForMutableLocation(e, checkMode, elementContextualType); - elementTypes.push(type); + elementTypes.push(getWidenedTypeOfUniqueESSymbolType(type)); } hasSpreadElement = hasSpreadElement || e.kind === SyntaxKind.SpreadElement; } @@ -13882,7 +13899,7 @@ namespace ts { let prop: TransientSymbol; if (hasLateBoundName(memberDecl)) { const nameType = checkComputedPropertyName(memberDecl.name); - if (nameType && nameType.flags & TypeFlags.StringOrNumberLiteralOrUnique) { + if (nameType && isLateBoundNameType(nameType)) { prop = createSymbol(SymbolFlags.Property | SymbolFlags.Late | member.flags, getLateBoundNameFromType(nameType)); } } @@ -13994,7 +14011,7 @@ namespace ts { if (spread.flags & TypeFlags.Object) { // only set the symbol and flags if this is a (fresh) object type spread.flags |= propagatedFlags; - spread.flags |= TypeFlags.Fresh; + spread.flags |= TypeFlags.FreshLiteral; (spread as ObjectType).objectFlags |= ObjectFlags.ObjectLiteral; spread.symbol = node.symbol; } @@ -14007,7 +14024,7 @@ namespace ts { const stringIndexInfo = isJSObjectLiteral ? jsObjectLiteralIndexInfo : hasComputedStringProperty ? getObjectLiteralIndexInfo(node.properties, offset, propertiesArray, IndexKind.String) : undefined; const numberIndexInfo = hasComputedNumberProperty && !isJSObjectLiteral ? getObjectLiteralIndexInfo(node.properties, offset, propertiesArray, IndexKind.Number) : undefined; const result = createAnonymousType(node.symbol, propertiesTable, emptyArray, emptyArray, stringIndexInfo, numberIndexInfo); - const freshObjectLiteralFlag = compilerOptions.suppressExcessPropertyErrors ? 0 : TypeFlags.Fresh; + const freshObjectLiteralFlag = compilerOptions.suppressExcessPropertyErrors ? 0 : TypeFlags.FreshLiteral; result.flags |= TypeFlags.ContainsObjectLiteral | freshObjectLiteralFlag | (typeFlags & TypeFlags.PropagatingFlags); result.objectFlags |= ObjectFlags.ObjectLiteral; if (patternWithComputedProperties) { @@ -16832,11 +16849,8 @@ namespace ts { // as a fresh unique symbol literal type. if (returnType.flags & TypeFlags.ESSymbolLike && isSymbolOrSymbolForCall(node)) { const parent = skipParentheses(node).parent; - if ((parent.kind === SyntaxKind.VariableDeclaration && parent.parent.flags & NodeFlags.Const) || - (parent.kind === SyntaxKind.PropertyDeclaration && hasModifier(parent, ModifierFlags.Readonly))) { - const symbol = getSymbolOfNode(parent); - if (symbol) return getFreshTypeOfLiteralOrUniqueType(getUniqueTypeForSymbol(symbol)); - } + const symbol = getSymbolOfNode(parent); + if (symbol) return getUniqueESSymbolTypeForSymbol(symbol); } return returnType; } @@ -17117,7 +17131,7 @@ namespace ts { const functionFlags = getFunctionFlags(func); let type: Type; if (func.body.kind !== SyntaxKind.Block) { - type = getRegularTypeOfUniqueType(checkExpressionCached(func.body, checkMode)); + type = checkExpressionCached(func.body, checkMode); if (functionFlags & FunctionFlags.Async) { // From within an async function you can return either a non-promise value or a promise. Any // Promise/A+ compatible implementation will always assimilate any foreign promise, so the @@ -17125,6 +17139,9 @@ namespace ts { // the native Promise type later in this function. type = checkAwaitedType(type, /*errorNode*/ func, Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member); } + + // widen 'symbol()' types when we infer the return type. + type = getWidenedTypeOfUniqueESSymbolType(type); } else { let types: Type[]; @@ -17157,7 +17174,10 @@ namespace ts { } } // Return a union of the return expression types. - type = getUnionType(map(types, getRegularTypeOfUniqueType), /*subtypeReduction*/ true); + type = getUnionType(types, /*subtypeReduction*/ true); + + // widen 'symbol()' types when we infer the return type. + type = getWidenedTypeOfUniqueESSymbolType(type); if (functionFlags & FunctionFlags.Generator) { // AsyncGenerator function or Generator function type = functionFlags & FunctionFlags.Async @@ -17170,12 +17190,11 @@ namespace ts { reportErrorsFromWidening(func, type); } - if (isUnitType(type)) { - if (!(contextualSignature && + if (isUnitType(type) && + !(contextualSignature && isLiteralContextualType( contextualSignature === getSignatureFromDeclaration(func) ? type : getReturnTypeOfSignature(contextualSignature)))) { - type = getWidenedLiteralType(type); - } + type = getWidenedLiteralType(type); } const widenedType = getWidenedType(type); @@ -17222,7 +17241,7 @@ namespace ts { if (!switchTypes.length) { return false; } - return eachTypeContainedIn(mapType(type, getRegularTypeOfLiteralOrUniqueType), switchTypes); + return eachTypeContainedIn(mapType(type, getRegularTypeOfLiteralType), switchTypes); } function functionHasImplicitReturn(func: FunctionLikeDeclaration) { @@ -17549,10 +17568,10 @@ namespace ts { } if (node.operand.kind === SyntaxKind.NumericLiteral) { if (node.operator === SyntaxKind.MinusToken) { - return getFreshTypeOfLiteralOrUniqueType(getLiteralType(-(node.operand).text)); + return getFreshTypeOfLiteralType(getLiteralType(-(node.operand).text)); } else if (node.operator === SyntaxKind.PlusToken) { - return getFreshTypeOfLiteralOrUniqueType(getLiteralType(+(node.operand).text)); + return getFreshTypeOfLiteralType(getLiteralType(+(node.operand).text)); } } switch (node.operator) { @@ -18431,10 +18450,10 @@ namespace ts { return nullWideningType; case SyntaxKind.NoSubstitutionTemplateLiteral: case SyntaxKind.StringLiteral: - return getFreshTypeOfLiteralOrUniqueType(getLiteralType((node as LiteralExpression).text)); + return getFreshTypeOfLiteralType(getLiteralType((node as LiteralExpression).text)); case SyntaxKind.NumericLiteral: checkGrammarNumericLiteral(node as NumericLiteral); - return getFreshTypeOfLiteralOrUniqueType(getLiteralType(+(node as NumericLiteral).text)); + return getFreshTypeOfLiteralType(getLiteralType(+(node as NumericLiteral).text)); case SyntaxKind.TrueKeyword: return trueType; case SyntaxKind.FalseKeyword: @@ -19236,8 +19255,8 @@ namespace ts { checkTypeAssignableTo(constraintType, stringType, node.typeParameter.constraint); } - function checkSymbolType(node: SymbolTypeNode) { - checkGrammarSymbolTypeNode(node); + function checkSymbolType(node: ESSymbolTypeNode) { + checkGrammarESSymbolTypeNode(node); } function isPrivateWithinAmbient(node: Node): boolean { @@ -22795,8 +22814,8 @@ namespace ts { return checkIndexedAccessType(node); case SyntaxKind.MappedType: return checkMappedType(node); - case SyntaxKind.SymbolType: - return checkSymbolType(node); + case SyntaxKind.ESSymbolType: + return checkSymbolType(node); case SyntaxKind.FunctionDeclaration: return checkFunctionDeclaration(node); case SyntaxKind.Block: @@ -23548,7 +23567,7 @@ namespace ts { if (isRightSideOfQualifiedNameOrPropertyAccess(expr)) { expr = expr.parent; } - return getRegularTypeOfLiteralOrUniqueType(getTypeOfExpression(expr)); + return getRegularTypeOfLiteralType(getTypeOfExpression(expr)); } /** @@ -23991,14 +24010,7 @@ namespace ts { let type: Type = unknownType; if (symbol && !(symbol.flags & (SymbolFlags.TypeLiteral | SymbolFlags.Signature))) { type = getTypeOfSymbol(symbol); - if (type.flags & TypeFlags.Unique) { - if (type.symbol !== symbol) { - type = getRegularTypeOfUniqueType(type); - } - } - else { - type = getWidenedLiteralType(type); - } + type = getWidenedLiteralType(type); } if (flags & TypeFormatFlags.AddUndefined) { type = getNullableType(type, TypeFlags.Undefined); @@ -24065,7 +24077,7 @@ namespace ts { function isLiteralConstDeclaration(node: VariableDeclaration | PropertyDeclaration | PropertySignature | ParameterDeclaration): boolean { if (isConst(node)) { const type = getTypeOfSymbol(getSymbolOfNode(node)); - return !!(type.flags & TypeFlags.StringOrNumberLiteral && type.flags & TypeFlags.Fresh); + return !!(type.flags & TypeFlags.StringOrNumberLiteral && type.flags & TypeFlags.FreshLiteral); } return false; } @@ -25116,21 +25128,58 @@ namespace ts { } } - function checkGrammarSymbolTypeNode(node: SymbolTypeNode) { - const parent = node.parent; - if (parent.kind !== SyntaxKind.VariableDeclaration && - parent.kind !== SyntaxKind.PropertyDeclaration && - parent.kind !== SyntaxKind.PropertySignature && - parent.kind !== SyntaxKind.PropertyAssignment) { - return grammarErrorOnNode(node, Diagnostics.Unique_symbol_types_are_only_allowed_on_variables_and_properties); + function checkGrammarESSymbolTypeNode(node: ESSymbolTypeNode) { + let parent = node.parent; + while (parent.kind === SyntaxKind.ParenthesizedType) { + parent = parent.parent; } - if (parent.kind === SyntaxKind.VariableDeclaration && - (parent).name.kind !== SyntaxKind.Identifier) { - return grammarErrorOnNode(node, Diagnostics.Unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name); + + switch (parent.kind) { + case SyntaxKind.VariableDeclaration: + const decl = parent as VariableDeclaration; + if (decl.name.kind !== SyntaxKind.Identifier) { + return grammarErrorOnNode(node, Diagnostics.Unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name); + } + if (!isVariableDeclarationInVariableStatement(decl)) { + return grammarErrorOnNode(node, Diagnostics.Unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement); + } + if (!(decl.parent.flags & NodeFlags.Const)) { + return grammarErrorOnNode((parent).name, Diagnostics.A_variable_whose_type_is_a_unique_symbol_type_must_be_const); + } + break; + + case SyntaxKind.PropertyDeclaration: + if (!hasModifier(parent, ModifierFlags.Static) || + !hasModifier(parent, ModifierFlags.Readonly)) { + return grammarErrorOnNode((parent).name, Diagnostics.A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly); + } + break; + + case SyntaxKind.PropertySignature: + if (!hasModifier(parent, ModifierFlags.Readonly)) { + return grammarErrorOnNode((parent).name, Diagnostics.A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly); + } + break; + + // report specific errors for cases where a `symbol()` type is disallowed even when it is in a `const` or `readonly` declaration. + case SyntaxKind.UnionType: + return grammarErrorOnNode(node, Diagnostics.Unique_symbol_types_are_not_allowed_in_a_union_type); + case SyntaxKind.IntersectionType: + return grammarErrorOnNode(node, Diagnostics.Unique_symbol_types_are_not_allowed_in_an_intersection_type); + case SyntaxKind.ArrayType: + return grammarErrorOnNode(node, Diagnostics.Unique_symbol_types_are_not_allowed_in_an_array_type); + case SyntaxKind.TupleType: + return grammarErrorOnNode(node, Diagnostics.Unique_symbol_types_are_not_allowed_in_a_tuple_type); + case SyntaxKind.MappedType: + return grammarErrorOnNode(node, Diagnostics.Unique_symbol_types_are_not_allowed_in_a_mapped_type); + + // report a general error for any other invalid use site. + default: + return grammarErrorOnNode(node, Diagnostics.Unique_symbol_types_are_not_allowed_here); } } - function checkGrammarForNonSymbolComputedProperty(node: DeclarationName, message: DiagnosticMessage) { + function checkGrammarForInvalidDynamicName(node: DeclarationName, message: DiagnosticMessage) { if (isUnboundDynamicName(node)) { return grammarErrorOnNode(node, message); } @@ -25159,17 +25208,17 @@ namespace ts { // and accessors are not allowed in ambient contexts in general, // so this error only really matters for methods. if (isInAmbientContext(node)) { - return checkGrammarForNonSymbolComputedProperty(node.name, Diagnostics.A_computed_property_name_in_an_ambient_context_must_directly_refer_to_a_built_in_symbol); + return checkGrammarForInvalidDynamicName(node.name, Diagnostics.A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type); } else if (!node.body) { - return checkGrammarForNonSymbolComputedProperty(node.name, Diagnostics.A_computed_property_name_in_a_method_overload_must_directly_refer_to_a_built_in_symbol); + return checkGrammarForInvalidDynamicName(node.name, Diagnostics.A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type); } } else if (node.parent.kind === SyntaxKind.InterfaceDeclaration) { - return checkGrammarForNonSymbolComputedProperty(node.name, Diagnostics.A_computed_property_name_in_an_interface_must_directly_refer_to_a_built_in_symbol); + return checkGrammarForInvalidDynamicName(node.name, Diagnostics.A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type); } else if (node.parent.kind === SyntaxKind.TypeLiteral) { - return checkGrammarForNonSymbolComputedProperty(node.name, Diagnostics.A_computed_property_name_in_a_type_literal_must_directly_refer_to_a_built_in_symbol); + return checkGrammarForInvalidDynamicName(node.name, Diagnostics.A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type); } } @@ -25421,12 +25470,12 @@ namespace ts { function checkGrammarProperty(node: PropertyDeclaration) { if (isClassLike(node.parent)) { - if (checkGrammarForNonSymbolComputedProperty(node.name, Diagnostics.A_computed_property_name_in_a_class_property_declaration_must_directly_refer_to_a_built_in_symbol)) { + if (checkGrammarForInvalidDynamicName(node.name, Diagnostics.A_computed_property_name_in_a_class_property_declaration_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type)) { return true; } } else if (node.parent.kind === SyntaxKind.InterfaceDeclaration) { - if (checkGrammarForNonSymbolComputedProperty(node.name, Diagnostics.A_computed_property_name_in_an_interface_must_directly_refer_to_a_built_in_symbol)) { + if (checkGrammarForInvalidDynamicName(node.name, Diagnostics.A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type)) { return true; } if (node.initializer) { @@ -25434,7 +25483,7 @@ namespace ts { } } else if (node.parent.kind === SyntaxKind.TypeLiteral) { - if (checkGrammarForNonSymbolComputedProperty(node.name, Diagnostics.A_computed_property_name_in_a_type_literal_must_directly_refer_to_a_built_in_symbol)) { + if (checkGrammarForInvalidDynamicName(node.name, Diagnostics.A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type)) { return true; } if (node.initializer) { diff --git a/src/compiler/declarationEmitter.ts b/src/compiler/declarationEmitter.ts index 32acc028397..3fb1a5d976e 100644 --- a/src/compiler/declarationEmitter.ts +++ b/src/compiler/declarationEmitter.ts @@ -425,7 +425,7 @@ namespace ts { case SyntaxKind.ThisType: case SyntaxKind.LiteralType: return writeTextOfNode(currentText, type); - case SyntaxKind.SymbolType: + case SyntaxKind.ESSymbolType: return write("symbol()"); case SyntaxKind.ExpressionWithTypeArguments: return emitExpressionWithTypeArguments(type); diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 39bc5c0382b..908e18d3786 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -491,23 +491,23 @@ "category": "Error", "code": 1164 }, - "A computed property name in an ambient context must directly refer to a built-in symbol.": { + "A computed property name in an ambient context must refer to an expression whose type is a literal type or a unique 'symbol()' type.": { "category": "Error", "code": 1165 }, - "A computed property name in a class property declaration must directly refer to a built-in symbol.": { + "A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type.": { "category": "Error", "code": 1166 }, - "A computed property name in a method overload must directly refer to a built-in symbol.": { + "A computed property name in a method overload must refer to an expression whose type is a literal type or a unique 'symbol()' type.": { "category": "Error", "code": 1168 }, - "A computed property name in an interface must directly refer to a built-in symbol.": { + "A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type.": { "category": "Error", "code": 1169 }, - "A computed property name in a type literal must directly refer to a built-in symbol.": { + "A computed property name in a type literal must refer to an expression whose type is a literal type or a unique 'symbol()' type.": { "category": "Error", "code": 1170 }, @@ -907,14 +907,50 @@ "category": "Error", "code": 1328 }, - "Unique 'symbol()' types are only allowed on variables and properties.": { + "Unique 'symbol()' types are not allowed in a union type.": { "category": "Error", "code": 1329 }, - "Unique 'symbol()' types may not be used on a variable declaration with a binding name.": { + "Unique 'symbol()' types are not allowed in an intersection type.": { "category": "Error", "code": 1330 }, + "Unique 'symbol()' types are not allowed in an array type.": { + "category": "Error", + "code": 1331 + }, + "Unique 'symbol()' types are not allowed in a tuple type.": { + "category": "Error", + "code": 1332 + }, + "Unique 'symbol()' types are not allowed in a mapped type.": { + "category": "Error", + "code": 1333 + }, + "A property of an interface or type literal whose type is a unique 'symbol()' type must be 'readonly'.": { + "category": "Error", + "code": 1334 + }, + "A property of a class whose type is a unique 'symbol()' type must be both 'static' and 'readonly'.": { + "category": "Error", + "code": 1335 + }, + "A variable whose type is a unique 'symbol()' type must be 'const'.": { + "category": "Error", + "code": 1336 + }, + "Unique 'symbol()' types may not be used on a variable declaration with a binding name.": { + "category": "Error", + "code": 1337 + }, + "Unique 'symbol()' types are only allowed on variables in a variable statement.": { + "category": "Error", + "code": 1338 + }, + "Unique 'symbol()' types are not allowed here.": { + "category": "Error", + "code": 1339 + }, "Duplicate identifier '{0}'.": { "category": "Error", diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 729335916f0..32f0f3ce1d5 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -574,7 +574,7 @@ namespace ts { return emitMappedType(node); case SyntaxKind.LiteralType: return emitLiteralType(node); - case SyntaxKind.SymbolType: + case SyntaxKind.ESSymbolType: return write("symbol()"); // Binding patterns diff --git a/src/compiler/factory.ts b/src/compiler/factory.ts index 1b412198e5e..8749d6375c3 100644 --- a/src/compiler/factory.ts +++ b/src/compiler/factory.ts @@ -785,6 +785,10 @@ namespace ts { : node; } + export function createESSymbolTypeNode() { + return createSynthesizedNode(SyntaxKind.ESSymbolType); + } + // Binding Patterns export function createObjectBindingPattern(elements: ReadonlyArray) { diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 5f8121c9095..34ed0889ca3 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -2615,7 +2615,7 @@ namespace ts { if (token() === SyntaxKind.DotToken) return undefined; if (parseOptional(SyntaxKind.OpenParenToken)) { parseExpected(SyntaxKind.CloseParenToken); - return finishNode(createNode(SyntaxKind.SymbolType, fullStart)); + return finishNode(createNode(SyntaxKind.ESSymbolType, fullStart)); } else { return finishNode(createNode(SyntaxKind.SymbolKeyword, fullStart)); diff --git a/src/compiler/types.ts b/src/compiler/types.ts index d629bb60904..1d2d95ec6f4 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -240,7 +240,7 @@ namespace ts { IndexedAccessType, MappedType, LiteralType, - SymbolType, + ESSymbolType, // Binding patterns ObjectBindingPattern, ArrayBindingPattern, @@ -399,7 +399,7 @@ namespace ts { FirstFutureReservedWord = ImplementsKeyword, LastFutureReservedWord = YieldKeyword, FirstTypeNode = TypePredicate, - LastTypeNode = SymbolType, + LastTypeNode = ESSymbolType, FirstPunctuation = OpenBraceToken, LastPunctuation = CaretEqualsToken, FirstToken = Unknown, @@ -1053,8 +1053,9 @@ namespace ts { literal: BooleanLiteral | LiteralExpression | PrefixUnaryExpression; } - export interface SymbolTypeNode extends TypeNode { - kind: SyntaxKind.SymbolType; + // Represents a unique `symbol()` type + export interface ESSymbolTypeNode extends TypeNode { + kind: SyntaxKind.ESSymbolType; } export interface StringLiteral extends LiteralExpression { @@ -2738,6 +2739,7 @@ namespace ts { // State InObjectTypeLiteral = 1 << 20, InTypeAlias = 1 << 23, // Writing type in type alias declaration + IsDeclarationOfUniqueESSymbolType = 1 << 24, } /* @internal */ @@ -3051,10 +3053,10 @@ namespace ts { isDeclarationWithCollidingName?: boolean; // True if symbol is block scoped redeclaration bindingElement?: BindingElement; // Binding element associated with property symbol exportsSomeValue?: boolean; // True if module exports some value (not just types) + enumKind?: EnumKind; // Enum declaration classification lateSymbol?: Symbol; // Late-bound symbol for a computed property lateMembers?: UnderscoreEscapedMap; // Late-bound members resolved during check resolvedMembers?: SymbolTable; // Combined early- and late-bound members of a symbol - enumKind?: EnumKind; // Enum declaration classification } /* @internal */ @@ -3204,7 +3206,7 @@ namespace ts { BooleanLiteral = 1 << 7, EnumLiteral = 1 << 8, // Always combined with StringLiteral, NumberLiteral, or Union ESSymbol = 1 << 9, // Type of symbol primitive introduced in ES6 - Unique = 1 << 10, // symbol() + UniqueESSymbol = 1 << 10, // symbol() Void = 1 << 11, Undefined = 1 << 12, Null = 1 << 13, @@ -3216,7 +3218,7 @@ namespace ts { Index = 1 << 19, // keyof T IndexedAccess = 1 << 20, // T[K] /* @internal */ - Fresh = 1 << 21, // Fresh literal or unique type + FreshLiteral = 1 << 21, // Fresh literal or unique type /* @internal */ ContainsWideningType = 1 << 22, // Type is or contains undefined or null widening type /* @internal */ @@ -3229,11 +3231,11 @@ namespace ts { /* @internal */ Nullable = Undefined | Null, - Literal = StringLiteral | NumberLiteral | BooleanLiteral | Unique, + Literal = StringLiteral | NumberLiteral | BooleanLiteral | UniqueESSymbol, Unit = Literal | Nullable, StringOrNumberLiteral = StringLiteral | NumberLiteral, /* @internal */ - StringOrNumberLiteralOrUnique = StringOrNumberLiteral | Unique, + StringOrNumberLiteralOrUnique = StringOrNumberLiteral | UniqueESSymbol, /* @internal */ DefinitelyFalsy = StringLiteral | NumberLiteral | BooleanLiteral | Void | Undefined | Null, PossiblyFalsy = DefinitelyFalsy | String | Number | Boolean, @@ -3245,7 +3247,7 @@ namespace ts { NumberLike = Number | NumberLiteral | Enum, BooleanLike = Boolean | BooleanLiteral, EnumLike = Enum | EnumLiteral, - ESSymbolLike = ESSymbol | Unique, + ESSymbolLike = ESSymbol | UniqueESSymbol, UnionOrIntersection = Union | Intersection, StructuredType = Object | Union | Intersection, StructuredOrTypeVariable = StructuredType | TypeParameter | Index | IndexedAccess, @@ -3253,7 +3255,7 @@ namespace ts { // 'Narrowable' types are types where narrowing actually narrows. // This *should* be every type other than null, undefined, void, and never - Narrowable = Any | StructuredType | TypeParameter | Index | IndexedAccess | StringLike | NumberLike | BooleanLike | ESSymbol | Unique | NonPrimitive, + Narrowable = Any | StructuredType | TypeParameter | Index | IndexedAccess | StringLike | NumberLike | BooleanLike | ESSymbol | UniqueESSymbol | NonPrimitive, NotUnionOrUnit = Any | ESSymbol | Object | NonPrimitive, /* @internal */ RequiresWidening = ContainsWideningType | ContainsObjectLiteral, @@ -3288,11 +3290,9 @@ namespace ts { regularType?: LiteralType; // Regular version of type } - // Unique symbol types (TypeFlags.Unique) - export interface UniqueType extends Type { + // Unique symbol types (TypeFlags.UniqueESSymbol) + export interface UniqueESSymbolType extends Type { symbol: Symbol; - freshType?: UniqueType; // Fresh version of the type - regularType?: UniqueType; // Regular version of the type } export interface StringLiteralType extends LiteralType { diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 02c58d43832..f9f5e9fb7cf 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -926,6 +926,11 @@ namespace ts { return false; } + export function isVariableDeclarationInVariableStatement(node: VariableDeclaration) { + return node.parent.kind === SyntaxKind.VariableDeclarationList + && node.parent.parent.kind === SyntaxKind.VariableStatement; + } + export function introducesArgumentsExoticObject(node: Node) { switch (node.kind) { case SyntaxKind.MethodDeclaration: diff --git a/tests/baselines/reference/capturedParametersInInitializers2.errors.txt b/tests/baselines/reference/capturedParametersInInitializers2.errors.txt index 9e9f48e5390..0cf6c7f07c1 100644 --- a/tests/baselines/reference/capturedParametersInInitializers2.errors.txt +++ b/tests/baselines/reference/capturedParametersInInitializers2.errors.txt @@ -1,5 +1,5 @@ tests/cases/compiler/capturedParametersInInitializers2.ts(1,36): error TS2373: Initializer of parameter 'y' cannot reference identifier 'x' declared after it. -tests/cases/compiler/capturedParametersInInitializers2.ts(4,26): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +tests/cases/compiler/capturedParametersInInitializers2.ts(4,26): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. ==== tests/cases/compiler/capturedParametersInInitializers2.ts (2 errors) ==== @@ -10,5 +10,5 @@ tests/cases/compiler/capturedParametersInInitializers2.ts(4,26): error TS1166: A } function foo2(y = class {[x] = x}, x = 1) { ~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. } \ No newline at end of file diff --git a/tests/baselines/reference/classWithDuplicateIdentifier.errors.txt b/tests/baselines/reference/classWithDuplicateIdentifier.errors.txt index 65ae28303db..958ec02f002 100644 --- a/tests/baselines/reference/classWithDuplicateIdentifier.errors.txt +++ b/tests/baselines/reference/classWithDuplicateIdentifier.errors.txt @@ -2,7 +2,7 @@ tests/cases/compiler/classWithDuplicateIdentifier.ts(3,5): error TS2300: Duplica tests/cases/compiler/classWithDuplicateIdentifier.ts(6,5): error TS2300: Duplicate identifier 'b'. tests/cases/compiler/classWithDuplicateIdentifier.ts(7,5): error TS2300: Duplicate identifier 'b'. tests/cases/compiler/classWithDuplicateIdentifier.ts(11,5): error TS2300: Duplicate identifier 'c'. -tests/cases/compiler/classWithDuplicateIdentifier.ts(11,5): error TS2713: Subsequent property declarations must have the same type. Property 'c' must be of type 'number', but here has type 'string'. +tests/cases/compiler/classWithDuplicateIdentifier.ts(11,5): error TS2715: Subsequent property declarations must have the same type. Property 'c' must be of type 'number', but here has type 'string'. ==== tests/cases/compiler/classWithDuplicateIdentifier.ts (5 errors) ==== @@ -26,6 +26,6 @@ tests/cases/compiler/classWithDuplicateIdentifier.ts(11,5): error TS2713: Subseq ~ !!! error TS2300: Duplicate identifier 'c'. ~ -!!! error TS2713: Subsequent property declarations must have the same type. Property 'c' must be of type 'number', but here has type 'string'. +!!! error TS2715: Subsequent property declarations must have the same type. Property 'c' must be of type 'number', but here has type 'string'. } \ No newline at end of file diff --git a/tests/baselines/reference/complicatedPrivacy.errors.txt b/tests/baselines/reference/complicatedPrivacy.errors.txt index 661b0693807..2848a11b2a4 100644 --- a/tests/baselines/reference/complicatedPrivacy.errors.txt +++ b/tests/baselines/reference/complicatedPrivacy.errors.txt @@ -1,5 +1,5 @@ tests/cases/compiler/complicatedPrivacy.ts(11,24): error TS1054: A 'get' accessor cannot have parameters. -tests/cases/compiler/complicatedPrivacy.ts(35,5): error TS1170: A computed property name in a type literal must directly refer to a built-in symbol. +tests/cases/compiler/complicatedPrivacy.ts(35,5): error TS1170: A computed property name in a type literal must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/compiler/complicatedPrivacy.ts(35,6): error TS2693: 'number' only refers to a type, but is being used as a value here. tests/cases/compiler/complicatedPrivacy.ts(73,55): error TS2694: Namespace 'mglo5' has no exported member 'i6'. @@ -43,7 +43,7 @@ tests/cases/compiler/complicatedPrivacy.ts(73,55): error TS2694: Namespace 'mglo { [number]: C1; // Used to be indexer, now it is a computed property ~~~~~~~~ -!!! error TS1170: A computed property name in a type literal must directly refer to a built-in symbol. +!!! error TS1170: A computed property name in a type literal must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~~~~~~ !!! error TS2693: 'number' only refers to a type, but is being used as a value here. }) { diff --git a/tests/baselines/reference/computedPropertyNames12_ES5.errors.txt b/tests/baselines/reference/computedPropertyNames12_ES5.errors.txt index 71f81c27245..bee9a01bcd4 100644 --- a/tests/baselines/reference/computedPropertyNames12_ES5.errors.txt +++ b/tests/baselines/reference/computedPropertyNames12_ES5.errors.txt @@ -1,12 +1,12 @@ -tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES5.ts(5,5): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. -tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES5.ts(6,5): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. -tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES5.ts(7,12): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. -tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES5.ts(8,5): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. -tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES5.ts(9,5): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. -tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES5.ts(12,5): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. -tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES5.ts(13,12): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. -tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES5.ts(14,5): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. -tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES5.ts(15,12): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES5.ts(5,5): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. +tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES5.ts(6,5): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. +tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES5.ts(7,12): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. +tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES5.ts(8,5): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. +tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES5.ts(9,5): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. +tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES5.ts(12,5): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. +tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES5.ts(13,12): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. +tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES5.ts(14,5): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. +tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES5.ts(15,12): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. ==== tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES5.ts (9 errors) ==== @@ -16,31 +16,31 @@ tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES5.ts(15 class C { [s]: number; ~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. [n] = n; ~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. static [s + s]: string; ~~~~~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. [s + n] = 2; ~~~~~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. [+s]: typeof s; ~~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. static [""]: number; [0]: number; [a]: number; ~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. static [true]: number; ~~~~~~~~~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. [`hello bye`] = 0; ~~~~~~~~~~~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. static [`hello ${a} bye`] = 0 ~~~~~~~~~~~~~~~~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. } \ No newline at end of file diff --git a/tests/baselines/reference/computedPropertyNames12_ES6.errors.txt b/tests/baselines/reference/computedPropertyNames12_ES6.errors.txt index 8d8cce7e140..a81279994c2 100644 --- a/tests/baselines/reference/computedPropertyNames12_ES6.errors.txt +++ b/tests/baselines/reference/computedPropertyNames12_ES6.errors.txt @@ -1,12 +1,12 @@ -tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES6.ts(5,5): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. -tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES6.ts(6,5): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. -tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES6.ts(7,12): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. -tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES6.ts(8,5): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. -tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES6.ts(9,5): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. -tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES6.ts(12,5): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. -tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES6.ts(13,12): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. -tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES6.ts(14,5): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. -tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES6.ts(15,12): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES6.ts(5,5): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. +tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES6.ts(6,5): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. +tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES6.ts(7,12): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. +tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES6.ts(8,5): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. +tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES6.ts(9,5): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. +tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES6.ts(12,5): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. +tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES6.ts(13,12): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. +tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES6.ts(14,5): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. +tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES6.ts(15,12): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. ==== tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES6.ts (9 errors) ==== @@ -16,31 +16,31 @@ tests/cases/conformance/es6/computedProperties/computedPropertyNames12_ES6.ts(15 class C { [s]: number; ~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. [n] = n; ~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. static [s + s]: string; ~~~~~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. [s + n] = 2; ~~~~~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. [+s]: typeof s; ~~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. static [""]: number; [0]: number; [a]: number; ~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. static [true]: number; ~~~~~~~~~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. [`hello bye`] = 0; ~~~~~~~~~~~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. static [`hello ${a} bye`] = 0 ~~~~~~~~~~~~~~~~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. } \ No newline at end of file diff --git a/tests/baselines/reference/computedPropertyNames35_ES5.errors.txt b/tests/baselines/reference/computedPropertyNames35_ES5.errors.txt index aaf56487028..730594d0df9 100644 --- a/tests/baselines/reference/computedPropertyNames35_ES5.errors.txt +++ b/tests/baselines/reference/computedPropertyNames35_ES5.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/es6/computedProperties/computedPropertyNames35_ES5.ts(4,5): error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +tests/cases/conformance/es6/computedProperties/computedPropertyNames35_ES5.ts(4,5): error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/es6/computedProperties/computedPropertyNames35_ES5.ts(4,10): error TS2467: A computed property name cannot reference a type parameter from its containing type. @@ -8,7 +8,7 @@ tests/cases/conformance/es6/computedProperties/computedPropertyNames35_ES5.ts(4, bar(): string; [foo()](): void; ~~~~~~~~~~ -!!! error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +!!! error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2467: A computed property name cannot reference a type parameter from its containing type. } \ No newline at end of file diff --git a/tests/baselines/reference/computedPropertyNames35_ES6.errors.txt b/tests/baselines/reference/computedPropertyNames35_ES6.errors.txt index c8ef5efac31..11e9b35eeb6 100644 --- a/tests/baselines/reference/computedPropertyNames35_ES6.errors.txt +++ b/tests/baselines/reference/computedPropertyNames35_ES6.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/es6/computedProperties/computedPropertyNames35_ES6.ts(4,5): error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +tests/cases/conformance/es6/computedProperties/computedPropertyNames35_ES6.ts(4,5): error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/es6/computedProperties/computedPropertyNames35_ES6.ts(4,10): error TS2467: A computed property name cannot reference a type parameter from its containing type. @@ -8,7 +8,7 @@ tests/cases/conformance/es6/computedProperties/computedPropertyNames35_ES6.ts(4, bar(): string; [foo()](): void; ~~~~~~~~~~ -!!! error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +!!! error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2467: A computed property name cannot reference a type parameter from its containing type. } \ No newline at end of file diff --git a/tests/baselines/reference/computedPropertyNamesDeclarationEmit3_ES5.errors.txt b/tests/baselines/reference/computedPropertyNamesDeclarationEmit3_ES5.errors.txt index b6effe98a91..888f29c4dde 100644 --- a/tests/baselines/reference/computedPropertyNamesDeclarationEmit3_ES5.errors.txt +++ b/tests/baselines/reference/computedPropertyNamesDeclarationEmit3_ES5.errors.txt @@ -1,9 +1,9 @@ -tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit3_ES5.ts(2,5): error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit3_ES5.ts(2,5): error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. ==== tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit3_ES5.ts (1 errors) ==== interface I { ["" + ""](): void; ~~~~~~~~~ -!!! error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +!!! error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. } \ No newline at end of file diff --git a/tests/baselines/reference/computedPropertyNamesDeclarationEmit3_ES6.errors.txt b/tests/baselines/reference/computedPropertyNamesDeclarationEmit3_ES6.errors.txt index 99832a42e37..70b2a3e2e16 100644 --- a/tests/baselines/reference/computedPropertyNamesDeclarationEmit3_ES6.errors.txt +++ b/tests/baselines/reference/computedPropertyNamesDeclarationEmit3_ES6.errors.txt @@ -1,9 +1,9 @@ -tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit3_ES6.ts(2,5): error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit3_ES6.ts(2,5): error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. ==== tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit3_ES6.ts (1 errors) ==== interface I { ["" + ""](): void; ~~~~~~~~~ -!!! error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +!!! error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. } \ No newline at end of file diff --git a/tests/baselines/reference/computedPropertyNamesDeclarationEmit4_ES5.errors.txt b/tests/baselines/reference/computedPropertyNamesDeclarationEmit4_ES5.errors.txt index fd84ac72270..b9fad3157a9 100644 --- a/tests/baselines/reference/computedPropertyNamesDeclarationEmit4_ES5.errors.txt +++ b/tests/baselines/reference/computedPropertyNamesDeclarationEmit4_ES5.errors.txt @@ -1,9 +1,9 @@ -tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit4_ES5.ts(2,5): error TS1170: A computed property name in a type literal must directly refer to a built-in symbol. +tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit4_ES5.ts(2,5): error TS1170: A computed property name in a type literal must refer to an expression whose type is a literal type or a unique 'symbol()' type. ==== tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit4_ES5.ts (1 errors) ==== var v: { ["" + ""](): void; ~~~~~~~~~ -!!! error TS1170: A computed property name in a type literal must directly refer to a built-in symbol. +!!! error TS1170: A computed property name in a type literal must refer to an expression whose type is a literal type or a unique 'symbol()' type. } \ No newline at end of file diff --git a/tests/baselines/reference/computedPropertyNamesDeclarationEmit4_ES6.errors.txt b/tests/baselines/reference/computedPropertyNamesDeclarationEmit4_ES6.errors.txt index 7cdd26576cb..94b904274ec 100644 --- a/tests/baselines/reference/computedPropertyNamesDeclarationEmit4_ES6.errors.txt +++ b/tests/baselines/reference/computedPropertyNamesDeclarationEmit4_ES6.errors.txt @@ -1,9 +1,9 @@ -tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit4_ES6.ts(2,5): error TS1170: A computed property name in a type literal must directly refer to a built-in symbol. +tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit4_ES6.ts(2,5): error TS1170: A computed property name in a type literal must refer to an expression whose type is a literal type or a unique 'symbol()' type. ==== tests/cases/conformance/es6/computedProperties/computedPropertyNamesDeclarationEmit4_ES6.ts (1 errors) ==== var v: { ["" + ""](): void; ~~~~~~~~~ -!!! error TS1170: A computed property name in a type literal must directly refer to a built-in symbol. +!!! error TS1170: A computed property name in a type literal must refer to an expression whose type is a literal type or a unique 'symbol()' type. } \ No newline at end of file diff --git a/tests/baselines/reference/computedPropertyNamesOnOverloads_ES5.errors.txt b/tests/baselines/reference/computedPropertyNamesOnOverloads_ES5.errors.txt index 2a17d7da815..cf6c9801074 100644 --- a/tests/baselines/reference/computedPropertyNamesOnOverloads_ES5.errors.txt +++ b/tests/baselines/reference/computedPropertyNamesOnOverloads_ES5.errors.txt @@ -1,5 +1,5 @@ -tests/cases/conformance/es6/computedProperties/computedPropertyNamesOnOverloads_ES5.ts(4,5): error TS1168: A computed property name in a method overload must directly refer to a built-in symbol. -tests/cases/conformance/es6/computedProperties/computedPropertyNamesOnOverloads_ES5.ts(5,5): error TS1168: A computed property name in a method overload must directly refer to a built-in symbol. +tests/cases/conformance/es6/computedProperties/computedPropertyNamesOnOverloads_ES5.ts(4,5): error TS1168: A computed property name in a method overload must refer to an expression whose type is a literal type or a unique 'symbol()' type. +tests/cases/conformance/es6/computedProperties/computedPropertyNamesOnOverloads_ES5.ts(5,5): error TS1168: A computed property name in a method overload must refer to an expression whose type is a literal type or a unique 'symbol()' type. ==== tests/cases/conformance/es6/computedProperties/computedPropertyNamesOnOverloads_ES5.ts (2 errors) ==== @@ -8,9 +8,9 @@ tests/cases/conformance/es6/computedProperties/computedPropertyNamesOnOverloads_ class C { [methodName](v: string); ~~~~~~~~~~~~ -!!! error TS1168: A computed property name in a method overload must directly refer to a built-in symbol. +!!! error TS1168: A computed property name in a method overload must refer to an expression whose type is a literal type or a unique 'symbol()' type. [methodName](); ~~~~~~~~~~~~ -!!! error TS1168: A computed property name in a method overload must directly refer to a built-in symbol. +!!! error TS1168: A computed property name in a method overload must refer to an expression whose type is a literal type or a unique 'symbol()' type. [methodName](v?: string) { } } \ No newline at end of file diff --git a/tests/baselines/reference/computedPropertyNamesOnOverloads_ES6.errors.txt b/tests/baselines/reference/computedPropertyNamesOnOverloads_ES6.errors.txt index 381ee7c17ba..656a1d2b17e 100644 --- a/tests/baselines/reference/computedPropertyNamesOnOverloads_ES6.errors.txt +++ b/tests/baselines/reference/computedPropertyNamesOnOverloads_ES6.errors.txt @@ -1,5 +1,5 @@ -tests/cases/conformance/es6/computedProperties/computedPropertyNamesOnOverloads_ES6.ts(4,5): error TS1168: A computed property name in a method overload must directly refer to a built-in symbol. -tests/cases/conformance/es6/computedProperties/computedPropertyNamesOnOverloads_ES6.ts(5,5): error TS1168: A computed property name in a method overload must directly refer to a built-in symbol. +tests/cases/conformance/es6/computedProperties/computedPropertyNamesOnOverloads_ES6.ts(4,5): error TS1168: A computed property name in a method overload must refer to an expression whose type is a literal type or a unique 'symbol()' type. +tests/cases/conformance/es6/computedProperties/computedPropertyNamesOnOverloads_ES6.ts(5,5): error TS1168: A computed property name in a method overload must refer to an expression whose type is a literal type or a unique 'symbol()' type. ==== tests/cases/conformance/es6/computedProperties/computedPropertyNamesOnOverloads_ES6.ts (2 errors) ==== @@ -8,9 +8,9 @@ tests/cases/conformance/es6/computedProperties/computedPropertyNamesOnOverloads_ class C { [methodName](v: string); ~~~~~~~~~~~~ -!!! error TS1168: A computed property name in a method overload must directly refer to a built-in symbol. +!!! error TS1168: A computed property name in a method overload must refer to an expression whose type is a literal type or a unique 'symbol()' type. [methodName](); ~~~~~~~~~~~~ -!!! error TS1168: A computed property name in a method overload must directly refer to a built-in symbol. +!!! error TS1168: A computed property name in a method overload must refer to an expression whose type is a literal type or a unique 'symbol()' type. [methodName](v?: string) { } } \ No newline at end of file diff --git a/tests/baselines/reference/duplicateClassElements.errors.txt b/tests/baselines/reference/duplicateClassElements.errors.txt index cd44aab2d2a..17110937e03 100644 --- a/tests/baselines/reference/duplicateClassElements.errors.txt +++ b/tests/baselines/reference/duplicateClassElements.errors.txt @@ -16,7 +16,7 @@ tests/cases/compiler/duplicateClassElements.ts(26,9): error TS2300: Duplicate id tests/cases/compiler/duplicateClassElements.ts(29,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/duplicateClassElements.ts(32,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/duplicateClassElements.ts(34,12): error TS2300: Duplicate identifier 'x2'. -tests/cases/compiler/duplicateClassElements.ts(34,12): error TS2713: Subsequent property declarations must have the same type. Property 'x2' must be of type 'number', but here has type 'any'. +tests/cases/compiler/duplicateClassElements.ts(34,12): error TS2715: Subsequent property declarations must have the same type. Property 'x2' must be of type 'number', but here has type 'any'. tests/cases/compiler/duplicateClassElements.ts(36,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/duplicateClassElements.ts(36,9): error TS2300: Duplicate identifier 'z2'. tests/cases/compiler/duplicateClassElements.ts(39,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. @@ -96,7 +96,7 @@ tests/cases/compiler/duplicateClassElements.ts(41,12): error TS2300: Duplicate i ~~ !!! error TS2300: Duplicate identifier 'x2'. ~~ -!!! error TS2713: Subsequent property declarations must have the same type. Property 'x2' must be of type 'number', but here has type 'any'. +!!! error TS2715: Subsequent property declarations must have the same type. Property 'x2' must be of type 'number', but here has type 'any'. get z2() { ~~ diff --git a/tests/baselines/reference/dynamicNames.js b/tests/baselines/reference/dynamicNames.js index 41b57f57908..979ed0c1beb 100644 --- a/tests/baselines/reference/dynamicNames.js +++ b/tests/baselines/reference/dynamicNames.js @@ -29,7 +29,7 @@ import * as M from "./module"; namespace N { export const c2 = "a"; export const c3 = 1; - export const s1 = s0; + export const s1: typeof s0 = s0; export interface T4 { [N.c2]: number; @@ -52,7 +52,7 @@ namespace N { export const c4 = "a"; export const c5 = 1; -export const s2 = s0; +export const s2: typeof s0 = s0; interface T8 { [c4]: number; diff --git a/tests/baselines/reference/dynamicNames.symbols b/tests/baselines/reference/dynamicNames.symbols index 056c77843fe..6ac8b66baa6 100644 --- a/tests/baselines/reference/dynamicNames.symbols +++ b/tests/baselines/reference/dynamicNames.symbols @@ -74,12 +74,13 @@ namespace N { export const c3 = 1; >c3 : Symbol(c3, Decl(main.ts, 5, 16)) - export const s1 = s0; + export const s1: typeof s0 = s0; >s1 : Symbol(s1, Decl(main.ts, 6, 16)) +>s0 : Symbol(s0, Decl(main.ts, 0, 16)) >s0 : Symbol(s0, Decl(main.ts, 0, 16)) export interface T4 { ->T4 : Symbol(T4, Decl(main.ts, 6, 25)) +>T4 : Symbol(T4, Decl(main.ts, 6, 36)) [N.c2]: number; >N.c2 : Symbol(c2, Decl(main.ts, 4, 16)) @@ -98,7 +99,7 @@ namespace N { } export declare class T5 implements T4 { >T5 : Symbol(T5, Decl(main.ts, 12, 5)) ->T4 : Symbol(T4, Decl(main.ts, 6, 25)) +>T4 : Symbol(T4, Decl(main.ts, 6, 36)) [N.c2]: number; >N.c2 : Symbol(c2, Decl(main.ts, 4, 16)) @@ -146,12 +147,13 @@ export const c4 = "a"; export const c5 = 1; >c5 : Symbol(c5, Decl(main.ts, 28, 12)) -export const s2 = s0; +export const s2: typeof s0 = s0; >s2 : Symbol(s2, Decl(main.ts, 29, 12)) >s0 : Symbol(s0, Decl(main.ts, 0, 16)) +>s0 : Symbol(s0, Decl(main.ts, 0, 16)) interface T8 { ->T8 : Symbol(T8, Decl(main.ts, 29, 21)) +>T8 : Symbol(T8, Decl(main.ts, 29, 32)) [c4]: number; >c4 : Symbol(c4, Decl(main.ts, 27, 12)) @@ -164,7 +166,7 @@ interface T8 { } declare class T9 implements T8 { >T9 : Symbol(T9, Decl(main.ts, 35, 1)) ->T8 : Symbol(T8, Decl(main.ts, 29, 21)) +>T8 : Symbol(T8, Decl(main.ts, 29, 32)) [c4]: number; >c4 : Symbol(c4, Decl(main.ts, 27, 12)) @@ -269,7 +271,7 @@ let t3_1: M.T3; let t4: N.T4; >t4 : Symbol(t4, Decl(main.ts, 75, 3)) >N : Symbol(N, Decl(main.ts, 1, 30)) ->T4 : Symbol(N.T4, Decl(main.ts, 6, 25)) +>T4 : Symbol(N.T4, Decl(main.ts, 6, 36)) let t5: N.T5; >t5 : Symbol(t5, Decl(main.ts, 76, 3)) @@ -288,7 +290,7 @@ let t7: N.T7; let t8: T8; >t8 : Symbol(t8, Decl(main.ts, 79, 3)) ->T8 : Symbol(T8, Decl(main.ts, 29, 21)) +>T8 : Symbol(T8, Decl(main.ts, 29, 32)) let t9: T9; >t9 : Symbol(t9, Decl(main.ts, 80, 3)) diff --git a/tests/baselines/reference/dynamicNames.types b/tests/baselines/reference/dynamicNames.types index 058585be7da..98d5617093f 100644 --- a/tests/baselines/reference/dynamicNames.types +++ b/tests/baselines/reference/dynamicNames.types @@ -9,7 +9,7 @@ export const c1 = 1; export const s0 = Symbol(); >s0 : symbol() ->Symbol() : typeof s0 +>Symbol() : symbol() >Symbol : SymbolConstructor export interface T0 { @@ -22,7 +22,7 @@ export interface T0 { >c1 : 1 [s0]: boolean; ->s0 : typeof s0 +>s0 : symbol() } export declare class T1 implements T2 { >T1 : T1 @@ -35,7 +35,7 @@ export declare class T1 implements T2 { >c1 : 1 [s0]: boolean; ->s0 : typeof s0 +>s0 : symbol() } export declare class T2 extends T1 { >T2 : T2 @@ -51,7 +51,7 @@ export declare type T3 = { >c1 : 1 [s0]: boolean; ->s0 : typeof s0 +>s0 : symbol() }; @@ -79,9 +79,10 @@ namespace N { >c3 : 1 >1 : 1 - export const s1 = s0; ->s1 : typeof s0 ->s0 : typeof s0 + export const s1: typeof s0 = s0; +>s1 : symbol() +>s0 : symbol() +>s0 : symbol() export interface T4 { >T4 : T4 @@ -97,9 +98,9 @@ namespace N { >c3 : 1 [N.s1]: boolean; ->N.s1 : typeof s0 +>N.s1 : symbol() >N : typeof N ->s1 : typeof s0 +>s1 : symbol() } export declare class T5 implements T4 { >T5 : T5 @@ -116,9 +117,9 @@ namespace N { >c3 : 1 [N.s1]: boolean; ->N.s1 : typeof s0 +>N.s1 : symbol() >N : typeof N ->s1 : typeof s0 +>s1 : symbol() } export declare class T6 extends T5 { >T6 : T6 @@ -138,9 +139,9 @@ namespace N { >c3 : 1 [N.s1]: boolean; ->N.s1 : typeof s0 +>N.s1 : symbol() >N : typeof N ->s1 : typeof s0 +>s1 : symbol() }; } @@ -153,9 +154,10 @@ export const c5 = 1; >c5 : 1 >1 : 1 -export const s2 = s0; ->s2 : typeof s0 ->s0 : typeof s0 +export const s2: typeof s0 = s0; +>s2 : symbol() +>s0 : symbol() +>s0 : symbol() interface T8 { >T8 : T8 @@ -167,7 +169,7 @@ interface T8 { >c5 : 1 [s2]: boolean; ->s2 : typeof s0 +>s2 : symbol() } declare class T9 implements T8 { >T9 : T9 @@ -180,7 +182,7 @@ declare class T9 implements T8 { >c5 : 1 [s2]: boolean; ->s2 : typeof s0 +>s2 : symbol() } declare class T10 extends T9 { >T10 : T10 @@ -196,7 +198,7 @@ declare type T11 = { >c5 : 1 [s2]: boolean; ->s2 : typeof s0 +>s2 : symbol() }; @@ -208,7 +210,7 @@ interface T12 { 1: string; [s2]: boolean; ->s2 : typeof s0 +>s2 : symbol() } declare class T13 implements T2 { >T13 : T13 @@ -219,7 +221,7 @@ declare class T13 implements T2 { 1: string; [s2]: boolean; ->s2 : typeof s0 +>s2 : symbol() } declare class T14 extends T13 { >T14 : T14 @@ -233,7 +235,7 @@ declare type T15 = { 1: string; [s2]: boolean; ->s2 : typeof s0 +>s2 : symbol() }; @@ -471,7 +473,7 @@ export const o1 = { >"a" : "a" [s2]: true ->s2 : typeof s0 +>s2 : symbol() >true : true }; @@ -493,7 +495,7 @@ export const o1_s2 = o1[s2]; >o1_s2 : boolean >o1[s2] : boolean >o1 : { [c4]: number; [c5]: string; [s2]: boolean; } ->s2 : typeof s0 +>s2 : symbol() export const o2: T0 = o1; >o2 : T0 diff --git a/tests/baselines/reference/dynamicNamesErrors.errors.txt b/tests/baselines/reference/dynamicNamesErrors.errors.txt index cd097badd77..0d8f865b7cb 100644 --- a/tests/baselines/reference/dynamicNamesErrors.errors.txt +++ b/tests/baselines/reference/dynamicNamesErrors.errors.txt @@ -1,6 +1,6 @@ -tests/cases/compiler/dynamicNamesErrors.ts(5,5): error TS2714: Duplicate declaration '[c0]'. -tests/cases/compiler/dynamicNamesErrors.ts(6,5): error TS2714: Duplicate declaration '[c0]'. -tests/cases/compiler/dynamicNamesErrors.ts(19,5): error TS2713: Subsequent property declarations must have the same type. Property '[c1]' must be of type 'number', but here has type 'string'. +tests/cases/compiler/dynamicNamesErrors.ts(5,5): error TS2716: Duplicate declaration '[c0]'. +tests/cases/compiler/dynamicNamesErrors.ts(6,5): error TS2716: Duplicate declaration '[c0]'. +tests/cases/compiler/dynamicNamesErrors.ts(19,5): error TS2715: Subsequent property declarations must have the same type. Property '[c1]' must be of type 'number', but here has type 'string'. tests/cases/compiler/dynamicNamesErrors.ts(24,1): error TS2322: Type 'T2' is not assignable to type 'T1'. Types of property '[c0]' are incompatible. Type 'string' is not assignable to type 'number'. @@ -17,10 +17,10 @@ tests/cases/compiler/dynamicNamesErrors.ts(28,6): error TS4033: Property '[c0]' interface T0 { [c0]: number; ~~~~ -!!! error TS2714: Duplicate declaration '[c0]'. +!!! error TS2716: Duplicate declaration '[c0]'. 1: number; ~ -!!! error TS2714: Duplicate declaration '[c0]'. +!!! error TS2716: Duplicate declaration '[c0]'. } interface T1 { @@ -35,7 +35,7 @@ tests/cases/compiler/dynamicNamesErrors.ts(28,6): error TS4033: Property '[c0]' [c0]: number; [c1]: string; ~~~~ -!!! error TS2713: Subsequent property declarations must have the same type. Property '[c1]' must be of type 'number', but here has type 'string'. +!!! error TS2715: Subsequent property declarations must have the same type. Property '[c1]' must be of type 'number', but here has type 'string'. } let t1: T1; diff --git a/tests/baselines/reference/gettersAndSettersErrors.errors.txt b/tests/baselines/reference/gettersAndSettersErrors.errors.txt index 87b317670d5..bb26eb5ead0 100644 --- a/tests/baselines/reference/gettersAndSettersErrors.errors.txt +++ b/tests/baselines/reference/gettersAndSettersErrors.errors.txt @@ -1,7 +1,7 @@ tests/cases/compiler/gettersAndSettersErrors.ts(2,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/gettersAndSettersErrors.ts(3,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/gettersAndSettersErrors.ts(5,12): error TS2300: Duplicate identifier 'Foo'. -tests/cases/compiler/gettersAndSettersErrors.ts(5,12): error TS2713: Subsequent property declarations must have the same type. Property 'Foo' must be of type 'string', but here has type 'number'. +tests/cases/compiler/gettersAndSettersErrors.ts(5,12): error TS2715: Subsequent property declarations must have the same type. Property 'Foo' must be of type 'string', but here has type 'number'. tests/cases/compiler/gettersAndSettersErrors.ts(6,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/gettersAndSettersErrors.ts(7,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/gettersAndSettersErrors.ts(11,17): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. @@ -23,7 +23,7 @@ tests/cases/compiler/gettersAndSettersErrors.ts(12,16): error TS2379: Getter and ~~~ !!! error TS2300: Duplicate identifier 'Foo'. ~~~ -!!! error TS2713: Subsequent property declarations must have the same type. Property 'Foo' must be of type 'string', but here has type 'number'. +!!! error TS2715: Subsequent property declarations must have the same type. Property 'Foo' must be of type 'string', but here has type 'number'. public get Goo(v:string):string {return null;} // error - getters must not have a parameter ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. diff --git a/tests/baselines/reference/giant.errors.txt b/tests/baselines/reference/giant.errors.txt index 809ae036358..d465bd8a958 100644 --- a/tests/baselines/reference/giant.errors.txt +++ b/tests/baselines/reference/giant.errors.txt @@ -16,7 +16,7 @@ tests/cases/compiler/giant.ts(33,16): error TS2300: Duplicate identifier 'tsF'. tests/cases/compiler/giant.ts(34,12): error TS2300: Duplicate identifier 'tgF'. tests/cases/compiler/giant.ts(35,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/giant.ts(35,16): error TS2300: Duplicate identifier 'tgF'. -tests/cases/compiler/giant.ts(60,5): error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +tests/cases/compiler/giant.ts(60,5): error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/compiler/giant.ts(60,6): error TS2304: Cannot find name 'p'. tests/cases/compiler/giant.ts(61,5): error TS1021: An index signature must have a type annotation. tests/cases/compiler/giant.ts(62,6): error TS1096: An index signature must have exactly one parameter. @@ -39,7 +39,7 @@ tests/cases/compiler/giant.ts(97,20): error TS2300: Duplicate identifier 'tsF'. tests/cases/compiler/giant.ts(98,16): error TS2300: Duplicate identifier 'tgF'. tests/cases/compiler/giant.ts(99,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/giant.ts(99,20): error TS2300: Duplicate identifier 'tgF'. -tests/cases/compiler/giant.ts(124,9): error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +tests/cases/compiler/giant.ts(124,9): error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/compiler/giant.ts(124,10): error TS2304: Cannot find name 'p'. tests/cases/compiler/giant.ts(125,9): error TS1021: An index signature must have a type annotation. tests/cases/compiler/giant.ts(126,10): error TS1096: An index signature must have exactly one parameter. @@ -63,7 +63,7 @@ tests/cases/compiler/giant.ts(176,20): error TS2300: Duplicate identifier 'tsF'. tests/cases/compiler/giant.ts(177,16): error TS2300: Duplicate identifier 'tgF'. tests/cases/compiler/giant.ts(178,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/giant.ts(178,20): error TS2300: Duplicate identifier 'tgF'. -tests/cases/compiler/giant.ts(203,9): error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +tests/cases/compiler/giant.ts(203,9): error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/compiler/giant.ts(203,10): error TS2304: Cannot find name 'p'. tests/cases/compiler/giant.ts(204,9): error TS1021: An index signature must have a type annotation. tests/cases/compiler/giant.ts(205,10): error TS1096: An index signature must have exactly one parameter. @@ -119,7 +119,7 @@ tests/cases/compiler/giant.ts(291,16): error TS2300: Duplicate identifier 'tsF'. tests/cases/compiler/giant.ts(292,12): error TS2300: Duplicate identifier 'tgF'. tests/cases/compiler/giant.ts(293,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/giant.ts(293,16): error TS2300: Duplicate identifier 'tgF'. -tests/cases/compiler/giant.ts(318,5): error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +tests/cases/compiler/giant.ts(318,5): error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/compiler/giant.ts(318,6): error TS2304: Cannot find name 'p'. tests/cases/compiler/giant.ts(319,5): error TS1021: An index signature must have a type annotation. tests/cases/compiler/giant.ts(320,6): error TS1096: An index signature must have exactly one parameter. @@ -142,7 +142,7 @@ tests/cases/compiler/giant.ts(355,20): error TS2300: Duplicate identifier 'tsF'. tests/cases/compiler/giant.ts(356,16): error TS2300: Duplicate identifier 'tgF'. tests/cases/compiler/giant.ts(357,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/giant.ts(357,20): error TS2300: Duplicate identifier 'tgF'. -tests/cases/compiler/giant.ts(382,9): error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +tests/cases/compiler/giant.ts(382,9): error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/compiler/giant.ts(382,10): error TS2304: Cannot find name 'p'. tests/cases/compiler/giant.ts(383,9): error TS1021: An index signature must have a type annotation. tests/cases/compiler/giant.ts(384,10): error TS1096: An index signature must have exactly one parameter. @@ -166,7 +166,7 @@ tests/cases/compiler/giant.ts(434,20): error TS2300: Duplicate identifier 'tsF'. tests/cases/compiler/giant.ts(435,16): error TS2300: Duplicate identifier 'tgF'. tests/cases/compiler/giant.ts(436,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/giant.ts(436,20): error TS2300: Duplicate identifier 'tgF'. -tests/cases/compiler/giant.ts(461,9): error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +tests/cases/compiler/giant.ts(461,9): error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/compiler/giant.ts(461,10): error TS2304: Cannot find name 'p'. tests/cases/compiler/giant.ts(462,9): error TS1021: An index signature must have a type annotation. tests/cases/compiler/giant.ts(463,10): error TS1096: An index signature must have exactly one parameter. @@ -238,7 +238,7 @@ tests/cases/compiler/giant.ts(555,21): error TS1036: Statements are not allowed tests/cases/compiler/giant.ts(557,24): error TS1183: An implementation cannot be declared in ambient contexts. tests/cases/compiler/giant.ts(560,21): error TS1183: An implementation cannot be declared in ambient contexts. tests/cases/compiler/giant.ts(562,21): error TS1183: An implementation cannot be declared in ambient contexts. -tests/cases/compiler/giant.ts(586,9): error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +tests/cases/compiler/giant.ts(586,9): error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/compiler/giant.ts(586,10): error TS2304: Cannot find name 'p'. tests/cases/compiler/giant.ts(587,9): error TS1021: An index signature must have a type annotation. tests/cases/compiler/giant.ts(588,10): error TS1096: An index signature must have exactly one parameter. @@ -255,7 +255,7 @@ tests/cases/compiler/giant.ts(620,26): error TS1183: An implementation cannot be tests/cases/compiler/giant.ts(622,24): error TS1183: An implementation cannot be declared in ambient contexts. tests/cases/compiler/giant.ts(625,21): error TS1183: An implementation cannot be declared in ambient contexts. tests/cases/compiler/giant.ts(627,21): error TS1183: An implementation cannot be declared in ambient contexts. -tests/cases/compiler/giant.ts(652,9): error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +tests/cases/compiler/giant.ts(652,9): error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/compiler/giant.ts(652,10): error TS2304: Cannot find name 'p'. tests/cases/compiler/giant.ts(653,9): error TS1021: An index signature must have a type annotation. tests/cases/compiler/giant.ts(654,10): error TS1096: An index signature must have exactly one parameter. @@ -363,7 +363,7 @@ tests/cases/compiler/giant.ts(675,30): error TS1183: An implementation cannot be //Index Signature [p]; ~~~ -!!! error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +!!! error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'p'. [p1: string]; @@ -473,7 +473,7 @@ tests/cases/compiler/giant.ts(675,30): error TS1183: An implementation cannot be //Index Signature [p]; ~~~ -!!! error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +!!! error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'p'. [p1: string]; @@ -600,7 +600,7 @@ tests/cases/compiler/giant.ts(675,30): error TS1183: An implementation cannot be //Index Signature [p]; ~~~ -!!! error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +!!! error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'p'. [p1: string]; @@ -827,7 +827,7 @@ tests/cases/compiler/giant.ts(675,30): error TS1183: An implementation cannot be //Index Signature [p]; ~~~ -!!! error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +!!! error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'p'. [p1: string]; @@ -937,7 +937,7 @@ tests/cases/compiler/giant.ts(675,30): error TS1183: An implementation cannot be //Index Signature [p]; ~~~ -!!! error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +!!! error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'p'. [p1: string]; @@ -1064,7 +1064,7 @@ tests/cases/compiler/giant.ts(675,30): error TS1183: An implementation cannot be //Index Signature [p]; ~~~ -!!! error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +!!! error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'p'. [p1: string]; @@ -1333,7 +1333,7 @@ tests/cases/compiler/giant.ts(675,30): error TS1183: An implementation cannot be //Index Signature [p]; ~~~ -!!! error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +!!! error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'p'. [p1: string]; @@ -1433,7 +1433,7 @@ tests/cases/compiler/giant.ts(675,30): error TS1183: An implementation cannot be //Index Signature [p]; ~~~ -!!! error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +!!! error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'p'. [p1: string]; diff --git a/tests/baselines/reference/indexSignatureMustHaveTypeAnnotation.errors.txt b/tests/baselines/reference/indexSignatureMustHaveTypeAnnotation.errors.txt index 88e09d7746b..7c5502967e1 100644 --- a/tests/baselines/reference/indexSignatureMustHaveTypeAnnotation.errors.txt +++ b/tests/baselines/reference/indexSignatureMustHaveTypeAnnotation.errors.txt @@ -1,7 +1,7 @@ -tests/cases/compiler/indexSignatureMustHaveTypeAnnotation.ts(3,5): error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +tests/cases/compiler/indexSignatureMustHaveTypeAnnotation.ts(3,5): error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/compiler/indexSignatureMustHaveTypeAnnotation.ts(3,6): error TS2304: Cannot find name 'x'. tests/cases/compiler/indexSignatureMustHaveTypeAnnotation.ts(4,5): error TS1021: An index signature must have a type annotation. -tests/cases/compiler/indexSignatureMustHaveTypeAnnotation.ts(9,5): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +tests/cases/compiler/indexSignatureMustHaveTypeAnnotation.ts(9,5): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/compiler/indexSignatureMustHaveTypeAnnotation.ts(9,6): error TS2304: Cannot find name 'x'. tests/cases/compiler/indexSignatureMustHaveTypeAnnotation.ts(14,5): error TS1021: An index signature must have a type annotation. @@ -11,7 +11,7 @@ tests/cases/compiler/indexSignatureMustHaveTypeAnnotation.ts(14,5): error TS1021 // Used to be indexer, now it is a computed property [x]: string; ~~~ -!!! error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +!!! error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'x'. [x: string]; @@ -23,7 +23,7 @@ tests/cases/compiler/indexSignatureMustHaveTypeAnnotation.ts(14,5): error TS1021 // Used to be indexer, now it is a computed property [x]: string ~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'x'. diff --git a/tests/baselines/reference/indexSignatureWithInitializer.errors.txt b/tests/baselines/reference/indexSignatureWithInitializer.errors.txt index 4a49de69393..e24d2163ad9 100644 --- a/tests/baselines/reference/indexSignatureWithInitializer.errors.txt +++ b/tests/baselines/reference/indexSignatureWithInitializer.errors.txt @@ -1,6 +1,6 @@ -tests/cases/compiler/indexSignatureWithInitializer.ts(3,5): error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +tests/cases/compiler/indexSignatureWithInitializer.ts(3,5): error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/compiler/indexSignatureWithInitializer.ts(3,6): error TS2304: Cannot find name 'x'. -tests/cases/compiler/indexSignatureWithInitializer.ts(7,5): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +tests/cases/compiler/indexSignatureWithInitializer.ts(7,5): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/compiler/indexSignatureWithInitializer.ts(7,6): error TS2304: Cannot find name 'x'. @@ -9,7 +9,7 @@ tests/cases/compiler/indexSignatureWithInitializer.ts(7,6): error TS2304: Cannot interface I { [x = '']: string; ~~~~~~~~ -!!! error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +!!! error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'x'. } @@ -17,7 +17,7 @@ tests/cases/compiler/indexSignatureWithInitializer.ts(7,6): error TS2304: Cannot class C { [x = 0]: string ~~~~~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'x'. } \ No newline at end of file diff --git a/tests/baselines/reference/indexWithoutParamType2.errors.txt b/tests/baselines/reference/indexWithoutParamType2.errors.txt index 7e72b7804e2..64c4e43db84 100644 --- a/tests/baselines/reference/indexWithoutParamType2.errors.txt +++ b/tests/baselines/reference/indexWithoutParamType2.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/indexWithoutParamType2.ts(3,5): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +tests/cases/compiler/indexWithoutParamType2.ts(3,5): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/compiler/indexWithoutParamType2.ts(3,6): error TS2304: Cannot find name 'x'. @@ -7,7 +7,7 @@ tests/cases/compiler/indexWithoutParamType2.ts(3,6): error TS2304: Cannot find n // Used to be indexer, now it is a computed property [x]: string ~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'x'. } \ No newline at end of file diff --git a/tests/baselines/reference/interfaceDeclaration1.errors.txt b/tests/baselines/reference/interfaceDeclaration1.errors.txt index f7720103bf0..8255a62dd51 100644 --- a/tests/baselines/reference/interfaceDeclaration1.errors.txt +++ b/tests/baselines/reference/interfaceDeclaration1.errors.txt @@ -2,7 +2,7 @@ tests/cases/compiler/interfaceDeclaration1.ts(2,5): error TS2300: Duplicate iden tests/cases/compiler/interfaceDeclaration1.ts(3,5): error TS2300: Duplicate identifier 'item'. tests/cases/compiler/interfaceDeclaration1.ts(7,5): error TS2300: Duplicate identifier 'item'. tests/cases/compiler/interfaceDeclaration1.ts(8,5): error TS2300: Duplicate identifier 'item'. -tests/cases/compiler/interfaceDeclaration1.ts(8,5): error TS2713: Subsequent property declarations must have the same type. Property 'item' must be of type 'any', but here has type 'number'. +tests/cases/compiler/interfaceDeclaration1.ts(8,5): error TS2715: Subsequent property declarations must have the same type. Property 'item' must be of type 'any', but here has type 'number'. tests/cases/compiler/interfaceDeclaration1.ts(22,11): error TS2310: Type 'I5' recursively references itself as a base type. tests/cases/compiler/interfaceDeclaration1.ts(35,7): error TS2420: Class 'C1' incorrectly implements interface 'I3'. Property 'prototype' is missing in type 'C1'. @@ -29,7 +29,7 @@ tests/cases/compiler/interfaceDeclaration1.ts(52,11): error TS2320: Interface 'i ~~~~ !!! error TS2300: Duplicate identifier 'item'. ~~~~ -!!! error TS2713: Subsequent property declarations must have the same type. Property 'item' must be of type 'any', but here has type 'number'. +!!! error TS2715: Subsequent property declarations must have the same type. Property 'item' must be of type 'any', but here has type 'number'. } interface I3 { diff --git a/tests/baselines/reference/mergedInterfacesWithConflictingPropertyNames.errors.txt b/tests/baselines/reference/mergedInterfacesWithConflictingPropertyNames.errors.txt index b70a0bf8fd5..18328ef9285 100644 --- a/tests/baselines/reference/mergedInterfacesWithConflictingPropertyNames.errors.txt +++ b/tests/baselines/reference/mergedInterfacesWithConflictingPropertyNames.errors.txt @@ -1,6 +1,6 @@ -tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConflictingPropertyNames.ts(6,5): error TS2713: Subsequent property declarations must have the same type. Property 'x' must be of type 'string', but here has type 'number'. -tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConflictingPropertyNames.ts(15,9): error TS2713: Subsequent property declarations must have the same type. Property 'x' must be of type 'T', but here has type 'number'. -tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConflictingPropertyNames.ts(39,9): error TS2713: Subsequent property declarations must have the same type. Property 'x' must be of type 'T', but here has type 'number'. +tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConflictingPropertyNames.ts(6,5): error TS2715: Subsequent property declarations must have the same type. Property 'x' must be of type 'string', but here has type 'number'. +tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConflictingPropertyNames.ts(15,9): error TS2715: Subsequent property declarations must have the same type. Property 'x' must be of type 'T', but here has type 'number'. +tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConflictingPropertyNames.ts(39,9): error TS2715: Subsequent property declarations must have the same type. Property 'x' must be of type 'T', but here has type 'number'. ==== tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConflictingPropertyNames.ts (3 errors) ==== @@ -11,7 +11,7 @@ tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConfli interface A { x: number; ~ -!!! error TS2713: Subsequent property declarations must have the same type. Property 'x' must be of type 'string', but here has type 'number'. +!!! error TS2715: Subsequent property declarations must have the same type. Property 'x' must be of type 'string', but here has type 'number'. } module M { @@ -22,7 +22,7 @@ tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConfli interface A { x: number; // error ~ -!!! error TS2713: Subsequent property declarations must have the same type. Property 'x' must be of type 'T', but here has type 'number'. +!!! error TS2715: Subsequent property declarations must have the same type. Property 'x' must be of type 'T', but here has type 'number'. } } @@ -48,6 +48,6 @@ tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConfli export interface A { x: number; // error ~ -!!! error TS2713: Subsequent property declarations must have the same type. Property 'x' must be of type 'T', but here has type 'number'. +!!! error TS2715: Subsequent property declarations must have the same type. Property 'x' must be of type 'T', but here has type 'number'. } } \ No newline at end of file diff --git a/tests/baselines/reference/numericStringNamedPropertyEquivalence.errors.txt b/tests/baselines/reference/numericStringNamedPropertyEquivalence.errors.txt index b1411c80d3b..b3973a62220 100644 --- a/tests/baselines/reference/numericStringNamedPropertyEquivalence.errors.txt +++ b/tests/baselines/reference/numericStringNamedPropertyEquivalence.errors.txt @@ -3,7 +3,7 @@ tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericString tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericStringNamedPropertyEquivalence.ts(12,5): error TS2300: Duplicate identifier '1'. tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericStringNamedPropertyEquivalence.ts(16,5): error TS2300: Duplicate identifier '1'. tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericStringNamedPropertyEquivalence.ts(17,5): error TS2300: Duplicate identifier '1'. -tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericStringNamedPropertyEquivalence.ts(17,5): error TS2713: Subsequent property declarations must have the same type. Property '1.0' must be of type 'number', but here has type 'string'. +tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericStringNamedPropertyEquivalence.ts(17,5): error TS2715: Subsequent property declarations must have the same type. Property '1.0' must be of type 'number', but here has type 'string'. tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericStringNamedPropertyEquivalence.ts(22,5): error TS2300: Duplicate identifier '0'. @@ -36,7 +36,7 @@ tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericString ~~~ !!! error TS2300: Duplicate identifier '1'. ~~~ -!!! error TS2713: Subsequent property declarations must have the same type. Property '1.0' must be of type 'number', but here has type 'string'. +!!! error TS2715: Subsequent property declarations must have the same type. Property '1.0' must be of type 'number', but here has type 'string'. } var b = { diff --git a/tests/baselines/reference/parserComputedPropertyName10.errors.txt b/tests/baselines/reference/parserComputedPropertyName10.errors.txt index a9b5396781a..18c612291a4 100644 --- a/tests/baselines/reference/parserComputedPropertyName10.errors.txt +++ b/tests/baselines/reference/parserComputedPropertyName10.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName10.ts(2,4): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName10.ts(2,4): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName10.ts(2,5): error TS2304: Cannot find name 'e'. @@ -6,7 +6,7 @@ tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedP class C { [e] = 1 ~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'e'. } \ No newline at end of file diff --git a/tests/baselines/reference/parserComputedPropertyName11.errors.txt b/tests/baselines/reference/parserComputedPropertyName11.errors.txt index 2a7a606f4bf..c9ff2faf43e 100644 --- a/tests/baselines/reference/parserComputedPropertyName11.errors.txt +++ b/tests/baselines/reference/parserComputedPropertyName11.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName11.ts(2,4): error TS1168: A computed property name in a method overload must directly refer to a built-in symbol. +tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName11.ts(2,4): error TS1168: A computed property name in a method overload must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName11.ts(2,5): error TS2304: Cannot find name 'e'. @@ -6,7 +6,7 @@ tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedP class C { [e](); ~~~ -!!! error TS1168: A computed property name in a method overload must directly refer to a built-in symbol. +!!! error TS1168: A computed property name in a method overload must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'e'. } \ No newline at end of file diff --git a/tests/baselines/reference/parserComputedPropertyName13.errors.txt b/tests/baselines/reference/parserComputedPropertyName13.errors.txt index a7a77cf1244..ba15de5feaf 100644 --- a/tests/baselines/reference/parserComputedPropertyName13.errors.txt +++ b/tests/baselines/reference/parserComputedPropertyName13.errors.txt @@ -1,10 +1,10 @@ -tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName13.ts(1,10): error TS1170: A computed property name in a type literal must directly refer to a built-in symbol. +tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName13.ts(1,10): error TS1170: A computed property name in a type literal must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName13.ts(1,11): error TS2304: Cannot find name 'e'. ==== tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName13.ts (2 errors) ==== var v: { [e]: number }; ~~~ -!!! error TS1170: A computed property name in a type literal must directly refer to a built-in symbol. +!!! error TS1170: A computed property name in a type literal must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'e'. \ No newline at end of file diff --git a/tests/baselines/reference/parserComputedPropertyName14.errors.txt b/tests/baselines/reference/parserComputedPropertyName14.errors.txt index 50a6d1bc689..082f9f2dce4 100644 --- a/tests/baselines/reference/parserComputedPropertyName14.errors.txt +++ b/tests/baselines/reference/parserComputedPropertyName14.errors.txt @@ -1,10 +1,10 @@ -tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName14.ts(1,10): error TS1170: A computed property name in a type literal must directly refer to a built-in symbol. +tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName14.ts(1,10): error TS1170: A computed property name in a type literal must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName14.ts(1,11): error TS2304: Cannot find name 'e'. ==== tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName14.ts (2 errors) ==== var v: { [e](): number }; ~~~ -!!! error TS1170: A computed property name in a type literal must directly refer to a built-in symbol. +!!! error TS1170: A computed property name in a type literal must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'e'. \ No newline at end of file diff --git a/tests/baselines/reference/parserComputedPropertyName15.errors.txt b/tests/baselines/reference/parserComputedPropertyName15.errors.txt index 9635178af16..7d9c7e8e5de 100644 --- a/tests/baselines/reference/parserComputedPropertyName15.errors.txt +++ b/tests/baselines/reference/parserComputedPropertyName15.errors.txt @@ -1,10 +1,10 @@ -tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName15.ts(1,31): error TS1170: A computed property name in a type literal must directly refer to a built-in symbol. +tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName15.ts(1,31): error TS1170: A computed property name in a type literal must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName15.ts(1,32): error TS2304: Cannot find name 'e'. ==== tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName15.ts (2 errors) ==== var v: { [e: number]: string; [e]: number }; ~~~ -!!! error TS1170: A computed property name in a type literal must directly refer to a built-in symbol. +!!! error TS1170: A computed property name in a type literal must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'e'. \ No newline at end of file diff --git a/tests/baselines/reference/parserComputedPropertyName18.errors.txt b/tests/baselines/reference/parserComputedPropertyName18.errors.txt index 9e64ddd0d28..715bb5dd437 100644 --- a/tests/baselines/reference/parserComputedPropertyName18.errors.txt +++ b/tests/baselines/reference/parserComputedPropertyName18.errors.txt @@ -1,10 +1,10 @@ -tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName18.ts(1,10): error TS1170: A computed property name in a type literal must directly refer to a built-in symbol. +tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName18.ts(1,10): error TS1170: A computed property name in a type literal must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName18.ts(1,11): error TS2304: Cannot find name 'e'. ==== tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName18.ts (2 errors) ==== var v: { [e]?(): number }; ~~~ -!!! error TS1170: A computed property name in a type literal must directly refer to a built-in symbol. +!!! error TS1170: A computed property name in a type literal must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'e'. \ No newline at end of file diff --git a/tests/baselines/reference/parserComputedPropertyName19.errors.txt b/tests/baselines/reference/parserComputedPropertyName19.errors.txt index 86bb591011e..626dbe78c5a 100644 --- a/tests/baselines/reference/parserComputedPropertyName19.errors.txt +++ b/tests/baselines/reference/parserComputedPropertyName19.errors.txt @@ -1,10 +1,10 @@ -tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName19.ts(1,10): error TS1170: A computed property name in a type literal must directly refer to a built-in symbol. +tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName19.ts(1,10): error TS1170: A computed property name in a type literal must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName19.ts(1,11): error TS2304: Cannot find name 'e'. ==== tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName19.ts (2 errors) ==== var v: { [e]? }; ~~~ -!!! error TS1170: A computed property name in a type literal must directly refer to a built-in symbol. +!!! error TS1170: A computed property name in a type literal must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'e'. \ No newline at end of file diff --git a/tests/baselines/reference/parserComputedPropertyName20.errors.txt b/tests/baselines/reference/parserComputedPropertyName20.errors.txt index 035e494af33..67bb57c519c 100644 --- a/tests/baselines/reference/parserComputedPropertyName20.errors.txt +++ b/tests/baselines/reference/parserComputedPropertyName20.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName20.ts(2,5): error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName20.ts(2,5): error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName20.ts(2,6): error TS2304: Cannot find name 'e'. @@ -6,7 +6,7 @@ tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedP interface I { [e](): number ~~~ -!!! error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +!!! error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'e'. } \ No newline at end of file diff --git a/tests/baselines/reference/parserComputedPropertyName21.errors.txt b/tests/baselines/reference/parserComputedPropertyName21.errors.txt index 4ebc321cc80..a67bf8e7799 100644 --- a/tests/baselines/reference/parserComputedPropertyName21.errors.txt +++ b/tests/baselines/reference/parserComputedPropertyName21.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName21.ts(2,5): error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName21.ts(2,5): error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName21.ts(2,6): error TS2304: Cannot find name 'e'. @@ -6,7 +6,7 @@ tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedP interface I { [e]: number ~~~ -!!! error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +!!! error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'e'. } \ No newline at end of file diff --git a/tests/baselines/reference/parserComputedPropertyName22.errors.txt b/tests/baselines/reference/parserComputedPropertyName22.errors.txt index fd9e3797018..44add808580 100644 --- a/tests/baselines/reference/parserComputedPropertyName22.errors.txt +++ b/tests/baselines/reference/parserComputedPropertyName22.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName22.ts(2,5): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName22.ts(2,5): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName22.ts(2,6): error TS2304: Cannot find name 'e'. @@ -6,7 +6,7 @@ tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedP declare class C { [e]: number ~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'e'. } \ No newline at end of file diff --git a/tests/baselines/reference/parserComputedPropertyName25.errors.txt b/tests/baselines/reference/parserComputedPropertyName25.errors.txt index 0d0a2a8d833..c88eb3aea11 100644 --- a/tests/baselines/reference/parserComputedPropertyName25.errors.txt +++ b/tests/baselines/reference/parserComputedPropertyName25.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName25.ts(3,5): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName25.ts(3,5): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName25.ts(3,6): error TS2304: Cannot find name 'e'. tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName25.ts(4,6): error TS2304: Cannot find name 'e2'. @@ -8,7 +8,7 @@ tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedP // No ASI [e] = 0 ~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'e'. [e2] = 1 diff --git a/tests/baselines/reference/parserComputedPropertyName28.errors.txt b/tests/baselines/reference/parserComputedPropertyName28.errors.txt index a84f3b7d16b..3aa13e0dfdb 100644 --- a/tests/baselines/reference/parserComputedPropertyName28.errors.txt +++ b/tests/baselines/reference/parserComputedPropertyName28.errors.txt @@ -1,6 +1,6 @@ -tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName28.ts(2,5): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName28.ts(2,5): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName28.ts(2,6): error TS2304: Cannot find name 'e'. -tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName28.ts(3,5): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName28.ts(3,5): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName28.ts(3,6): error TS2304: Cannot find name 'e2'. @@ -8,12 +8,12 @@ tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedP class C { [e]: number = 0; ~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'e'. [e2]: number ~~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~~ !!! error TS2304: Cannot find name 'e2'. } \ No newline at end of file diff --git a/tests/baselines/reference/parserComputedPropertyName29.errors.txt b/tests/baselines/reference/parserComputedPropertyName29.errors.txt index 3d886eacc50..bbb27f8f7bf 100644 --- a/tests/baselines/reference/parserComputedPropertyName29.errors.txt +++ b/tests/baselines/reference/parserComputedPropertyName29.errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName29.ts(3,5): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName29.ts(3,5): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName29.ts(3,6): error TS2304: Cannot find name 'e'. tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName29.ts(3,11): error TS2304: Cannot find name 'id'. -tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName29.ts(4,5): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName29.ts(4,5): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName29.ts(4,6): error TS2304: Cannot find name 'e2'. @@ -10,14 +10,14 @@ tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedP // yes ASI [e] = id++ ~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'e'. ~~ !!! error TS2304: Cannot find name 'id'. [e2]: number ~~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~~ !!! error TS2304: Cannot find name 'e2'. } \ No newline at end of file diff --git a/tests/baselines/reference/parserComputedPropertyName31.errors.txt b/tests/baselines/reference/parserComputedPropertyName31.errors.txt index 4661b0797af..aaa88696965 100644 --- a/tests/baselines/reference/parserComputedPropertyName31.errors.txt +++ b/tests/baselines/reference/parserComputedPropertyName31.errors.txt @@ -1,6 +1,6 @@ -tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName31.ts(3,5): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName31.ts(3,5): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName31.ts(3,6): error TS2304: Cannot find name 'e'. -tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName31.ts(4,5): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName31.ts(4,5): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName31.ts(4,6): error TS2304: Cannot find name 'e2'. @@ -9,12 +9,12 @@ tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedP // yes ASI [e]: number ~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'e'. [e2]: number ~~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~~ !!! error TS2304: Cannot find name 'e2'. } \ No newline at end of file diff --git a/tests/baselines/reference/parserComputedPropertyName32.errors.txt b/tests/baselines/reference/parserComputedPropertyName32.errors.txt index 4be8d70383e..3bc47afd90d 100644 --- a/tests/baselines/reference/parserComputedPropertyName32.errors.txt +++ b/tests/baselines/reference/parserComputedPropertyName32.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName32.ts(2,5): error TS1165: A computed property name in an ambient context must directly refer to a built-in symbol. +tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName32.ts(2,5): error TS1165: A computed property name in an ambient context must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName32.ts(2,6): error TS2304: Cannot find name 'e'. @@ -6,7 +6,7 @@ tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedP declare class C { [e](): number ~~~ -!!! error TS1165: A computed property name in an ambient context must directly refer to a built-in symbol. +!!! error TS1165: A computed property name in an ambient context must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'e'. } \ No newline at end of file diff --git a/tests/baselines/reference/parserComputedPropertyName36.errors.txt b/tests/baselines/reference/parserComputedPropertyName36.errors.txt index 6bcb5b52789..e746b5e4f54 100644 --- a/tests/baselines/reference/parserComputedPropertyName36.errors.txt +++ b/tests/baselines/reference/parserComputedPropertyName36.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName36.ts(2,5): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName36.ts(2,5): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName36.ts(2,6): error TS1213: Identifier expected. 'public' is a reserved word in strict mode. Class definitions are automatically in strict mode. tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName36.ts(2,6): error TS2304: Cannot find name 'public'. @@ -7,7 +7,7 @@ tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedP class C { [public ]: string; ~~~~~~~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~~~~~~ !!! error TS1213: Identifier expected. 'public' is a reserved word in strict mode. Class definitions are automatically in strict mode. ~~~~~~ diff --git a/tests/baselines/reference/parserComputedPropertyName7.errors.txt b/tests/baselines/reference/parserComputedPropertyName7.errors.txt index 056fa3d82fd..2fc7fd03463 100644 --- a/tests/baselines/reference/parserComputedPropertyName7.errors.txt +++ b/tests/baselines/reference/parserComputedPropertyName7.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName7.ts(2,4): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName7.ts(2,4): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName7.ts(2,5): error TS2304: Cannot find name 'e'. @@ -6,7 +6,7 @@ tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedP class C { [e] ~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'e'. } \ No newline at end of file diff --git a/tests/baselines/reference/parserComputedPropertyName8.errors.txt b/tests/baselines/reference/parserComputedPropertyName8.errors.txt index 32bb4906353..0a57a6decbd 100644 --- a/tests/baselines/reference/parserComputedPropertyName8.errors.txt +++ b/tests/baselines/reference/parserComputedPropertyName8.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName8.ts(2,11): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName8.ts(2,11): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName8.ts(2,12): error TS2304: Cannot find name 'e'. @@ -6,7 +6,7 @@ tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedP class C { public [e] ~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'e'. } \ No newline at end of file diff --git a/tests/baselines/reference/parserComputedPropertyName9.errors.txt b/tests/baselines/reference/parserComputedPropertyName9.errors.txt index 9db0cbde3bd..8d283a5f1b8 100644 --- a/tests/baselines/reference/parserComputedPropertyName9.errors.txt +++ b/tests/baselines/reference/parserComputedPropertyName9.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName9.ts(2,4): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName9.ts(2,4): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName9.ts(2,5): error TS2304: Cannot find name 'e'. tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName9.ts(2,9): error TS2304: Cannot find name 'Type'. @@ -7,7 +7,7 @@ tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedP class C { [e]: Type ~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'e'. ~~~~ diff --git a/tests/baselines/reference/parserES5ComputedPropertyName1.errors.txt b/tests/baselines/reference/parserES5ComputedPropertyName1.errors.txt index 2c8f1d2ab4f..997587b0c79 100644 --- a/tests/baselines/reference/parserES5ComputedPropertyName1.errors.txt +++ b/tests/baselines/reference/parserES5ComputedPropertyName1.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/parser/ecmascript5/ComputedPropertyNames/parserES5ComputedPropertyName1.ts(2,5): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +tests/cases/conformance/parser/ecmascript5/ComputedPropertyNames/parserES5ComputedPropertyName1.ts(2,5): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/parser/ecmascript5/ComputedPropertyNames/parserES5ComputedPropertyName1.ts(2,6): error TS2304: Cannot find name 'e'. @@ -6,7 +6,7 @@ tests/cases/conformance/parser/ecmascript5/ComputedPropertyNames/parserES5Comput declare class C { [e]: number ~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'e'. } \ No newline at end of file diff --git a/tests/baselines/reference/parserES5ComputedPropertyName10.errors.txt b/tests/baselines/reference/parserES5ComputedPropertyName10.errors.txt index 31d3f9985ab..233e665d9bf 100644 --- a/tests/baselines/reference/parserES5ComputedPropertyName10.errors.txt +++ b/tests/baselines/reference/parserES5ComputedPropertyName10.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/parser/ecmascript5/ComputedPropertyNames/parserES5ComputedPropertyName10.ts(2,4): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +tests/cases/conformance/parser/ecmascript5/ComputedPropertyNames/parserES5ComputedPropertyName10.ts(2,4): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/parser/ecmascript5/ComputedPropertyNames/parserES5ComputedPropertyName10.ts(2,5): error TS2304: Cannot find name 'e'. @@ -6,7 +6,7 @@ tests/cases/conformance/parser/ecmascript5/ComputedPropertyNames/parserES5Comput class C { [e] = 1 ~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'e'. } \ No newline at end of file diff --git a/tests/baselines/reference/parserES5ComputedPropertyName11.errors.txt b/tests/baselines/reference/parserES5ComputedPropertyName11.errors.txt index b4808607ab0..a8ba9113ea6 100644 --- a/tests/baselines/reference/parserES5ComputedPropertyName11.errors.txt +++ b/tests/baselines/reference/parserES5ComputedPropertyName11.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/parser/ecmascript5/ComputedPropertyNames/parserES5ComputedPropertyName11.ts(2,4): error TS1168: A computed property name in a method overload must directly refer to a built-in symbol. +tests/cases/conformance/parser/ecmascript5/ComputedPropertyNames/parserES5ComputedPropertyName11.ts(2,4): error TS1168: A computed property name in a method overload must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/parser/ecmascript5/ComputedPropertyNames/parserES5ComputedPropertyName11.ts(2,5): error TS2304: Cannot find name 'e'. @@ -6,7 +6,7 @@ tests/cases/conformance/parser/ecmascript5/ComputedPropertyNames/parserES5Comput class C { [e](); ~~~ -!!! error TS1168: A computed property name in a method overload must directly refer to a built-in symbol. +!!! error TS1168: A computed property name in a method overload must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'e'. } \ No newline at end of file diff --git a/tests/baselines/reference/parserES5ComputedPropertyName5.errors.txt b/tests/baselines/reference/parserES5ComputedPropertyName5.errors.txt index 9125ce7b58f..c92babd424d 100644 --- a/tests/baselines/reference/parserES5ComputedPropertyName5.errors.txt +++ b/tests/baselines/reference/parserES5ComputedPropertyName5.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/parser/ecmascript5/ComputedPropertyNames/parserES5ComputedPropertyName5.ts(2,5): error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +tests/cases/conformance/parser/ecmascript5/ComputedPropertyNames/parserES5ComputedPropertyName5.ts(2,5): error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/parser/ecmascript5/ComputedPropertyNames/parserES5ComputedPropertyName5.ts(2,6): error TS2304: Cannot find name 'e'. @@ -6,7 +6,7 @@ tests/cases/conformance/parser/ecmascript5/ComputedPropertyNames/parserES5Comput interface I { [e]: number ~~~ -!!! error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +!!! error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'e'. } \ No newline at end of file diff --git a/tests/baselines/reference/parserES5ComputedPropertyName7.errors.txt b/tests/baselines/reference/parserES5ComputedPropertyName7.errors.txt index 277bdcd3c94..d776c7921ea 100644 --- a/tests/baselines/reference/parserES5ComputedPropertyName7.errors.txt +++ b/tests/baselines/reference/parserES5ComputedPropertyName7.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/parser/ecmascript5/ComputedPropertyNames/parserES5ComputedPropertyName7.ts(2,4): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +tests/cases/conformance/parser/ecmascript5/ComputedPropertyNames/parserES5ComputedPropertyName7.ts(2,4): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/parser/ecmascript5/ComputedPropertyNames/parserES5ComputedPropertyName7.ts(2,5): error TS2304: Cannot find name 'e'. @@ -6,7 +6,7 @@ tests/cases/conformance/parser/ecmascript5/ComputedPropertyNames/parserES5Comput class C { [e] ~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'e'. } \ No newline at end of file diff --git a/tests/baselines/reference/parserES5ComputedPropertyName8.errors.txt b/tests/baselines/reference/parserES5ComputedPropertyName8.errors.txt index 6b674a1d2c0..d8f152c6b5a 100644 --- a/tests/baselines/reference/parserES5ComputedPropertyName8.errors.txt +++ b/tests/baselines/reference/parserES5ComputedPropertyName8.errors.txt @@ -1,10 +1,10 @@ -tests/cases/conformance/parser/ecmascript5/ComputedPropertyNames/parserES5ComputedPropertyName8.ts(1,10): error TS1170: A computed property name in a type literal must directly refer to a built-in symbol. +tests/cases/conformance/parser/ecmascript5/ComputedPropertyNames/parserES5ComputedPropertyName8.ts(1,10): error TS1170: A computed property name in a type literal must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/parser/ecmascript5/ComputedPropertyNames/parserES5ComputedPropertyName8.ts(1,11): error TS2304: Cannot find name 'e'. ==== tests/cases/conformance/parser/ecmascript5/ComputedPropertyNames/parserES5ComputedPropertyName8.ts (2 errors) ==== var v: { [e]: number }; ~~~ -!!! error TS1170: A computed property name in a type literal must directly refer to a built-in symbol. +!!! error TS1170: A computed property name in a type literal must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'e'. \ No newline at end of file diff --git a/tests/baselines/reference/parserES5ComputedPropertyName9.errors.txt b/tests/baselines/reference/parserES5ComputedPropertyName9.errors.txt index fb087a4d82f..f4a6da790c0 100644 --- a/tests/baselines/reference/parserES5ComputedPropertyName9.errors.txt +++ b/tests/baselines/reference/parserES5ComputedPropertyName9.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/parser/ecmascript5/ComputedPropertyNames/parserES5ComputedPropertyName9.ts(2,4): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +tests/cases/conformance/parser/ecmascript5/ComputedPropertyNames/parserES5ComputedPropertyName9.ts(2,4): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/parser/ecmascript5/ComputedPropertyNames/parserES5ComputedPropertyName9.ts(2,5): error TS2304: Cannot find name 'e'. tests/cases/conformance/parser/ecmascript5/ComputedPropertyNames/parserES5ComputedPropertyName9.ts(2,9): error TS2304: Cannot find name 'Type'. @@ -7,7 +7,7 @@ tests/cases/conformance/parser/ecmascript5/ComputedPropertyNames/parserES5Comput class C { [e]: Type ~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'e'. ~~~~ diff --git a/tests/baselines/reference/parserIndexSignature11.errors.txt b/tests/baselines/reference/parserIndexSignature11.errors.txt index f1f2a4a00f4..43f593c731a 100644 --- a/tests/baselines/reference/parserIndexSignature11.errors.txt +++ b/tests/baselines/reference/parserIndexSignature11.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/parser/ecmascript5/IndexSignatures/parserIndexSignature11.ts(2,9): error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +tests/cases/conformance/parser/ecmascript5/IndexSignatures/parserIndexSignature11.ts(2,9): error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/parser/ecmascript5/IndexSignatures/parserIndexSignature11.ts(2,10): error TS2304: Cannot find name 'p'. tests/cases/conformance/parser/ecmascript5/IndexSignatures/parserIndexSignature11.ts(3,9): error TS1021: An index signature must have a type annotation. tests/cases/conformance/parser/ecmascript5/IndexSignatures/parserIndexSignature11.ts(4,10): error TS1096: An index signature must have exactly one parameter. @@ -8,7 +8,7 @@ tests/cases/conformance/parser/ecmascript5/IndexSignatures/parserIndexSignature1 interface I { [p]; // Used to be indexer, now it is a computed property ~~~ -!!! error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +!!! error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'p'. [p1: string]; diff --git a/tests/baselines/reference/parserIndexSignature4.errors.txt b/tests/baselines/reference/parserIndexSignature4.errors.txt index bd73b4d2bf4..2a102bd4c6a 100644 --- a/tests/baselines/reference/parserIndexSignature4.errors.txt +++ b/tests/baselines/reference/parserIndexSignature4.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/parser/ecmascript5/IndexSignatures/parserIndexSignature4.ts(2,3): error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +tests/cases/conformance/parser/ecmascript5/IndexSignatures/parserIndexSignature4.ts(2,3): error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/parser/ecmascript5/IndexSignatures/parserIndexSignature4.ts(2,4): error TS2304: Cannot find name 'a'. @@ -6,7 +6,7 @@ tests/cases/conformance/parser/ecmascript5/IndexSignatures/parserIndexSignature4 interface I { [a = 0] // Used to be indexer, now it is a computed property ~~~~~~~ -!!! error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +!!! error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'a'. } \ No newline at end of file diff --git a/tests/baselines/reference/parserIndexSignature5.errors.txt b/tests/baselines/reference/parserIndexSignature5.errors.txt index 54ccd05f4f9..2870258489c 100644 --- a/tests/baselines/reference/parserIndexSignature5.errors.txt +++ b/tests/baselines/reference/parserIndexSignature5.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/parser/ecmascript5/IndexSignatures/parserIndexSignature5.ts(2,3): error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +tests/cases/conformance/parser/ecmascript5/IndexSignatures/parserIndexSignature5.ts(2,3): error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/conformance/parser/ecmascript5/IndexSignatures/parserIndexSignature5.ts(2,4): error TS2304: Cannot find name 'a'. @@ -6,7 +6,7 @@ tests/cases/conformance/parser/ecmascript5/IndexSignatures/parserIndexSignature5 interface I { [a] // Used to be indexer, now it is a computed property ~~~ -!!! error TS1169: A computed property name in an interface must directly refer to a built-in symbol. +!!! error TS1169: A computed property name in an interface must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~ !!! error TS2304: Cannot find name 'a'. } \ No newline at end of file diff --git a/tests/baselines/reference/propertyAssignment.errors.txt b/tests/baselines/reference/propertyAssignment.errors.txt index 6aa34c15ac9..74a8c9d46ac 100644 --- a/tests/baselines/reference/propertyAssignment.errors.txt +++ b/tests/baselines/reference/propertyAssignment.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/propertyAssignment.ts(4,13): error TS1170: A computed property name in a type literal must directly refer to a built-in symbol. +tests/cases/compiler/propertyAssignment.ts(4,13): error TS1170: A computed property name in a type literal must refer to an expression whose type is a literal type or a unique 'symbol()' type. tests/cases/compiler/propertyAssignment.ts(4,14): error TS2304: Cannot find name 'index'. tests/cases/compiler/propertyAssignment.ts(12,1): error TS2322: Type '{ x: number; }' is not assignable to type 'new () => any'. Type '{ x: number; }' provides no match for the signature 'new (): any'. @@ -12,7 +12,7 @@ tests/cases/compiler/propertyAssignment.ts(14,1): error TS2322: Type '{ x: numbe var foo2: { [index]; } // should be an error, used to be indexer, now it is a computed property ~~~~~~~ -!!! error TS1170: A computed property name in a type literal must directly refer to a built-in symbol. +!!! error TS1170: A computed property name in a type literal must refer to an expression whose type is a literal type or a unique 'symbol()' type. ~~~~~ !!! error TS2304: Cannot find name 'index'. var bar2: { x : number; } diff --git a/tests/baselines/reference/reassignStaticProp.errors.txt b/tests/baselines/reference/reassignStaticProp.errors.txt index ec24293c907..432d2b6913c 100644 --- a/tests/baselines/reference/reassignStaticProp.errors.txt +++ b/tests/baselines/reference/reassignStaticProp.errors.txt @@ -1,5 +1,5 @@ tests/cases/compiler/reassignStaticProp.ts(5,12): error TS2300: Duplicate identifier 'bar'. -tests/cases/compiler/reassignStaticProp.ts(5,12): error TS2713: Subsequent property declarations must have the same type. Property 'bar' must be of type 'number', but here has type 'string'. +tests/cases/compiler/reassignStaticProp.ts(5,12): error TS2715: Subsequent property declarations must have the same type. Property 'bar' must be of type 'number', but here has type 'string'. ==== tests/cases/compiler/reassignStaticProp.ts (2 errors) ==== @@ -11,7 +11,7 @@ tests/cases/compiler/reassignStaticProp.ts(5,12): error TS2713: Subsequent prope ~~~ !!! error TS2300: Duplicate identifier 'bar'. ~~~ -!!! error TS2713: Subsequent property declarations must have the same type. Property 'bar' must be of type 'number', but here has type 'string'. +!!! error TS2715: Subsequent property declarations must have the same type. Property 'bar' must be of type 'number', but here has type 'string'. } diff --git a/tests/baselines/reference/symbolProperty7.errors.txt b/tests/baselines/reference/symbolProperty7.errors.txt index 652f637d852..b2a182aa3bb 100644 --- a/tests/baselines/reference/symbolProperty7.errors.txt +++ b/tests/baselines/reference/symbolProperty7.errors.txt @@ -1,15 +1,15 @@ -tests/cases/conformance/es6/Symbols/symbolProperty7.ts(2,5): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. -tests/cases/conformance/es6/Symbols/symbolProperty7.ts(3,5): error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +tests/cases/conformance/es6/Symbols/symbolProperty7.ts(2,5): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. +tests/cases/conformance/es6/Symbols/symbolProperty7.ts(3,5): error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. ==== tests/cases/conformance/es6/Symbols/symbolProperty7.ts (2 errors) ==== class C { [Symbol()] = 0; ~~~~~~~~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. [Symbol()]: number; ~~~~~~~~~~ -!!! error TS1166: A computed property name in a class property declaration must directly refer to a built-in symbol. +!!! error TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a unique 'symbol()' type. [Symbol()]() { } get [Symbol()]() { return 0; diff --git a/tests/baselines/reference/uniqueSymbols.js b/tests/baselines/reference/uniqueSymbols.js new file mode 100644 index 00000000000..88282afb60e --- /dev/null +++ b/tests/baselines/reference/uniqueSymbols.js @@ -0,0 +1,275 @@ +//// [uniqueSymbols.ts] +// declarations with call initializer +const constCall = Symbol(); +let letCall = Symbol(); +var varCall = Symbol(); + +// ambient declaration with type +declare const constType: symbol(); + +// declaration with type and call initializer +const constTypeAndCall: symbol() = Symbol(); + +// declaration from initializer +const constInitToConstCall = constCall; +const constInitToLetCall = letCall; +const constInitToVarCall = varCall; +const constInitToConstDeclAmbient = constType; +let letInitToConstCall = constCall; +let letInitToLetCall = letCall; +let letInitToVarCall = varCall; +let letInitToConstDeclAmbient = constType; +var varInitToConstCall = constCall; +var varInitToLetCall = letCall; +var varInitToVarCall = varCall; +var varInitToConstDeclAmbient = constType; + +// declaration from initializer with type query +const constInitToConstCallWithTypeQuery: typeof constCall = constCall; +const constInitToConstDeclAmbientWithTypeQuery: typeof constType = constType; + +// function return inference +function funcReturnConstCall() { return constCall; } +function funcReturnLetCall() { return letCall; } +function funcReturnVarCall() { return varCall; } + +// function return value with type query +function funcReturnConstCallWithTypeQuery(): typeof constCall { return constCall; } + +// generator function yield inference +function* genFuncYieldConstCall() { yield constCall; } +function* genFuncYieldLetCall() { yield letCall; } +function* genFuncYieldVarCall() { yield varCall; } + +// generator function yield with return type query +function* genFuncYieldConstCallWithTypeQuery(): IterableIterator { yield constCall; } + +// async function return inference +async function asyncFuncReturnConstCall() { return constCall; } +async function asyncFuncReturnLetCall() { return letCall; } +async function asyncFuncReturnVarCall() { return varCall; } + +// async generator function yield inference +async function* asyncGenFuncYieldConstCall() { yield constCall; } +async function* asyncGenFuncYieldLetCall() { yield letCall; } +async function* asyncGenFuncYieldVarCall() { yield varCall; } + +// classes +class C { + static readonly readonlyStaticCall = Symbol(); + static readonly readonlyStaticType: symbol(); + static readonly readonlyStaticTypeAndCall: symbol() = Symbol(); + static readwriteStaticCall = Symbol(); + + readonly readonlyCall = Symbol(); + readwriteCall = Symbol(); +} +declare const c: C; + +const constInitToCReadonlyStaticCall = C.readonlyStaticCall; +const constInitToCReadonlyStaticType = C.readonlyStaticType; +const constInitToCReadonlyStaticTypeAndCall = C.readonlyStaticTypeAndCall; +const constInitToCReadwriteStaticCall = C.readwriteStaticCall; + +const constInitToCReadonlyStaticCallWithTypeQuery: typeof C.readonlyStaticCall = C.readonlyStaticCall; +const constInitToCReadonlyStaticTypeWithTypeQuery: typeof C.readonlyStaticType = C.readonlyStaticType; +const constInitToCReadonlyStaticTypeAndCallWithTypeQuery: typeof C.readonlyStaticTypeAndCall = C.readonlyStaticTypeAndCall; +const constInitToCReadwriteStaticCallWithTypeQuery: typeof C.readwriteStaticCall = C.readwriteStaticCall; + +const constInitToCReadonlyCall = c.readonlyCall; +const constInitToCReadwriteCall = c.readwriteCall; +const constInitToCReadonlyCallWithTypeQuery: typeof c.readonlyCall = c.readonlyCall; +const constInitToCReadwriteCallWithTypeQuery: typeof c.readwriteCall = c.readwriteCall; +const constInitToCReadonlyCallWithIndexedAccess: C["readonlyCall"] = c.readonlyCall; +const constInitToCReadwriteCallWithIndexedAccess: C["readwriteCall"] = c.readwriteCall; + +// interfaces +interface I { + readonly readonlyType: symbol(); +} +declare const i: I; + +const constInitToIReadonlyType = i.readonlyType; +const constInitToIReadonlyTypeWithTypeQuery: typeof i.readonlyType = i.readonlyType; +const constInitToIReadonlyTypeWithIndexedAccess: I["readonlyType"] = i.readonlyType; + +// type literals +type L = { + readonly readonlyType: symbol(); + nested: { + readonly readonlyNestedType: symbol(); + } +}; +declare const l: L; + +const constInitToLReadonlyType = l.readonlyType; +const constInitToLReadonlyNestedType = l.nested.readonlyNestedType; +const constInitToLReadonlyTypeWithTypeQuery: typeof l.readonlyType = l.readonlyType; +const constInitToLReadonlyNestedTypeWithTypeQuery: typeof l.nested.readonlyNestedType = l.nested.readonlyNestedType; +const constInitToLReadonlyTypeWithIndexedAccess: L["readonlyType"] = l.readonlyType; +const constInitToLReadonlyNestedTypeWithIndexedAccess: L["nested"]["readonlyNestedType"] = l.nested.readonlyNestedType; + +// type argument inference +const promiseForConstCall = Promise.resolve(constCall); +const arrayOfConstCall = [constCall]; + +//// [uniqueSymbols.js] +// declarations with call initializer +const constCall = Symbol(); +let letCall = Symbol(); +var varCall = Symbol(); +// declaration with type and call initializer +const constTypeAndCall = Symbol(); +// declaration from initializer +const constInitToConstCall = constCall; +const constInitToLetCall = letCall; +const constInitToVarCall = varCall; +const constInitToConstDeclAmbient = constType; +let letInitToConstCall = constCall; +let letInitToLetCall = letCall; +let letInitToVarCall = varCall; +let letInitToConstDeclAmbient = constType; +var varInitToConstCall = constCall; +var varInitToLetCall = letCall; +var varInitToVarCall = varCall; +var varInitToConstDeclAmbient = constType; +// declaration from initializer with type query +const constInitToConstCallWithTypeQuery = constCall; +const constInitToConstDeclAmbientWithTypeQuery = constType; +// function return inference +function funcReturnConstCall() { return constCall; } +function funcReturnLetCall() { return letCall; } +function funcReturnVarCall() { return varCall; } +// function return value with type query +function funcReturnConstCallWithTypeQuery() { return constCall; } +// generator function yield inference +function* genFuncYieldConstCall() { yield constCall; } +function* genFuncYieldLetCall() { yield letCall; } +function* genFuncYieldVarCall() { yield varCall; } +// generator function yield with return type query +function* genFuncYieldConstCallWithTypeQuery() { yield constCall; } +// async function return inference +async function asyncFuncReturnConstCall() { return constCall; } +async function asyncFuncReturnLetCall() { return letCall; } +async function asyncFuncReturnVarCall() { return varCall; } +// async generator function yield inference +async function* asyncGenFuncYieldConstCall() { yield constCall; } +async function* asyncGenFuncYieldLetCall() { yield letCall; } +async function* asyncGenFuncYieldVarCall() { yield varCall; } +// classes +class C { + constructor() { + this.readonlyCall = Symbol(); + this.readwriteCall = Symbol(); + } +} +C.readonlyStaticCall = Symbol(); +C.readonlyStaticTypeAndCall = Symbol(); +C.readwriteStaticCall = Symbol(); +const constInitToCReadonlyStaticCall = C.readonlyStaticCall; +const constInitToCReadonlyStaticType = C.readonlyStaticType; +const constInitToCReadonlyStaticTypeAndCall = C.readonlyStaticTypeAndCall; +const constInitToCReadwriteStaticCall = C.readwriteStaticCall; +const constInitToCReadonlyStaticCallWithTypeQuery = C.readonlyStaticCall; +const constInitToCReadonlyStaticTypeWithTypeQuery = C.readonlyStaticType; +const constInitToCReadonlyStaticTypeAndCallWithTypeQuery = C.readonlyStaticTypeAndCall; +const constInitToCReadwriteStaticCallWithTypeQuery = C.readwriteStaticCall; +const constInitToCReadonlyCall = c.readonlyCall; +const constInitToCReadwriteCall = c.readwriteCall; +const constInitToCReadonlyCallWithTypeQuery = c.readonlyCall; +const constInitToCReadwriteCallWithTypeQuery = c.readwriteCall; +const constInitToCReadonlyCallWithIndexedAccess = c.readonlyCall; +const constInitToCReadwriteCallWithIndexedAccess = c.readwriteCall; +const constInitToIReadonlyType = i.readonlyType; +const constInitToIReadonlyTypeWithTypeQuery = i.readonlyType; +const constInitToIReadonlyTypeWithIndexedAccess = i.readonlyType; +const constInitToLReadonlyType = l.readonlyType; +const constInitToLReadonlyNestedType = l.nested.readonlyNestedType; +const constInitToLReadonlyTypeWithTypeQuery = l.readonlyType; +const constInitToLReadonlyNestedTypeWithTypeQuery = l.nested.readonlyNestedType; +const constInitToLReadonlyTypeWithIndexedAccess = l.readonlyType; +const constInitToLReadonlyNestedTypeWithIndexedAccess = l.nested.readonlyNestedType; +// type argument inference +const promiseForConstCall = Promise.resolve(constCall); +const arrayOfConstCall = [constCall]; + + +//// [uniqueSymbols.d.ts] +declare const constCall: symbol(); +declare let letCall: symbol; +declare var varCall: symbol; +declare const constType: symbol(); +declare const constTypeAndCall: symbol(); +declare const constInitToConstCall: symbol; +declare const constInitToLetCall: symbol; +declare const constInitToVarCall: symbol; +declare const constInitToConstDeclAmbient: symbol; +declare let letInitToConstCall: symbol; +declare let letInitToLetCall: symbol; +declare let letInitToVarCall: symbol; +declare let letInitToConstDeclAmbient: symbol; +declare var varInitToConstCall: symbol; +declare var varInitToLetCall: symbol; +declare var varInitToVarCall: symbol; +declare var varInitToConstDeclAmbient: symbol; +declare const constInitToConstCallWithTypeQuery: typeof constCall; +declare const constInitToConstDeclAmbientWithTypeQuery: typeof constType; +declare function funcReturnConstCall(): symbol; +declare function funcReturnLetCall(): symbol; +declare function funcReturnVarCall(): symbol; +declare function funcReturnConstCallWithTypeQuery(): typeof constCall; +declare function genFuncYieldConstCall(): IterableIterator; +declare function genFuncYieldLetCall(): IterableIterator; +declare function genFuncYieldVarCall(): IterableIterator; +declare function genFuncYieldConstCallWithTypeQuery(): IterableIterator; +declare function asyncFuncReturnConstCall(): Promise; +declare function asyncFuncReturnLetCall(): Promise; +declare function asyncFuncReturnVarCall(): Promise; +declare function asyncGenFuncYieldConstCall(): AsyncIterableIterator; +declare function asyncGenFuncYieldLetCall(): AsyncIterableIterator; +declare function asyncGenFuncYieldVarCall(): AsyncIterableIterator; +declare class C { + static readonly readonlyStaticCall: symbol(); + static readonly readonlyStaticType: symbol(); + static readonly readonlyStaticTypeAndCall: symbol(); + static readwriteStaticCall: symbol; + readonly readonlyCall: symbol; + readwriteCall: symbol; +} +declare const c: C; +declare const constInitToCReadonlyStaticCall: symbol; +declare const constInitToCReadonlyStaticType: symbol; +declare const constInitToCReadonlyStaticTypeAndCall: symbol; +declare const constInitToCReadwriteStaticCall: symbol; +declare const constInitToCReadonlyStaticCallWithTypeQuery: typeof C.readonlyStaticCall; +declare const constInitToCReadonlyStaticTypeWithTypeQuery: typeof C.readonlyStaticType; +declare const constInitToCReadonlyStaticTypeAndCallWithTypeQuery: typeof C.readonlyStaticTypeAndCall; +declare const constInitToCReadwriteStaticCallWithTypeQuery: typeof C.readwriteStaticCall; +declare const constInitToCReadonlyCall: symbol; +declare const constInitToCReadwriteCall: symbol; +declare const constInitToCReadonlyCallWithTypeQuery: typeof c.readonlyCall; +declare const constInitToCReadwriteCallWithTypeQuery: typeof c.readwriteCall; +declare const constInitToCReadonlyCallWithIndexedAccess: C["readonlyCall"]; +declare const constInitToCReadwriteCallWithIndexedAccess: C["readwriteCall"]; +interface I { + readonly readonlyType: symbol(); +} +declare const i: I; +declare const constInitToIReadonlyType: symbol; +declare const constInitToIReadonlyTypeWithTypeQuery: typeof i.readonlyType; +declare const constInitToIReadonlyTypeWithIndexedAccess: I["readonlyType"]; +declare type L = { + readonly readonlyType: symbol(); + nested: { + readonly readonlyNestedType: symbol(); + }; +}; +declare const l: L; +declare const constInitToLReadonlyType: symbol; +declare const constInitToLReadonlyNestedType: symbol; +declare const constInitToLReadonlyTypeWithTypeQuery: typeof l.readonlyType; +declare const constInitToLReadonlyNestedTypeWithTypeQuery: typeof l.nested.readonlyNestedType; +declare const constInitToLReadonlyTypeWithIndexedAccess: L["readonlyType"]; +declare const constInitToLReadonlyNestedTypeWithIndexedAccess: L["nested"]["readonlyNestedType"]; +declare const promiseForConstCall: Promise; +declare const arrayOfConstCall: symbol[]; diff --git a/tests/baselines/reference/uniqueSymbols.symbols b/tests/baselines/reference/uniqueSymbols.symbols new file mode 100644 index 00000000000..9831e201ece --- /dev/null +++ b/tests/baselines/reference/uniqueSymbols.symbols @@ -0,0 +1,398 @@ +=== tests/cases/conformance/types/uniqueSymbol/uniqueSymbols.ts === +// declarations with call initializer +const constCall = Symbol(); +>constCall : Symbol(constCall, Decl(uniqueSymbols.ts, 1, 5)) +>Symbol : Symbol(Symbol, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --)) + +let letCall = Symbol(); +>letCall : Symbol(letCall, Decl(uniqueSymbols.ts, 2, 3)) +>Symbol : Symbol(Symbol, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --)) + +var varCall = Symbol(); +>varCall : Symbol(varCall, Decl(uniqueSymbols.ts, 3, 3)) +>Symbol : Symbol(Symbol, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --)) + +// ambient declaration with type +declare const constType: symbol(); +>constType : Symbol(constType, Decl(uniqueSymbols.ts, 6, 13)) + +// declaration with type and call initializer +const constTypeAndCall: symbol() = Symbol(); +>constTypeAndCall : Symbol(constTypeAndCall, Decl(uniqueSymbols.ts, 9, 5)) +>Symbol : Symbol(Symbol, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --)) + +// declaration from initializer +const constInitToConstCall = constCall; +>constInitToConstCall : Symbol(constInitToConstCall, Decl(uniqueSymbols.ts, 12, 5)) +>constCall : Symbol(constCall, Decl(uniqueSymbols.ts, 1, 5)) + +const constInitToLetCall = letCall; +>constInitToLetCall : Symbol(constInitToLetCall, Decl(uniqueSymbols.ts, 13, 5)) +>letCall : Symbol(letCall, Decl(uniqueSymbols.ts, 2, 3)) + +const constInitToVarCall = varCall; +>constInitToVarCall : Symbol(constInitToVarCall, Decl(uniqueSymbols.ts, 14, 5)) +>varCall : Symbol(varCall, Decl(uniqueSymbols.ts, 3, 3)) + +const constInitToConstDeclAmbient = constType; +>constInitToConstDeclAmbient : Symbol(constInitToConstDeclAmbient, Decl(uniqueSymbols.ts, 15, 5)) +>constType : Symbol(constType, Decl(uniqueSymbols.ts, 6, 13)) + +let letInitToConstCall = constCall; +>letInitToConstCall : Symbol(letInitToConstCall, Decl(uniqueSymbols.ts, 16, 3)) +>constCall : Symbol(constCall, Decl(uniqueSymbols.ts, 1, 5)) + +let letInitToLetCall = letCall; +>letInitToLetCall : Symbol(letInitToLetCall, Decl(uniqueSymbols.ts, 17, 3)) +>letCall : Symbol(letCall, Decl(uniqueSymbols.ts, 2, 3)) + +let letInitToVarCall = varCall; +>letInitToVarCall : Symbol(letInitToVarCall, Decl(uniqueSymbols.ts, 18, 3)) +>varCall : Symbol(varCall, Decl(uniqueSymbols.ts, 3, 3)) + +let letInitToConstDeclAmbient = constType; +>letInitToConstDeclAmbient : Symbol(letInitToConstDeclAmbient, Decl(uniqueSymbols.ts, 19, 3)) +>constType : Symbol(constType, Decl(uniqueSymbols.ts, 6, 13)) + +var varInitToConstCall = constCall; +>varInitToConstCall : Symbol(varInitToConstCall, Decl(uniqueSymbols.ts, 20, 3)) +>constCall : Symbol(constCall, Decl(uniqueSymbols.ts, 1, 5)) + +var varInitToLetCall = letCall; +>varInitToLetCall : Symbol(varInitToLetCall, Decl(uniqueSymbols.ts, 21, 3)) +>letCall : Symbol(letCall, Decl(uniqueSymbols.ts, 2, 3)) + +var varInitToVarCall = varCall; +>varInitToVarCall : Symbol(varInitToVarCall, Decl(uniqueSymbols.ts, 22, 3)) +>varCall : Symbol(varCall, Decl(uniqueSymbols.ts, 3, 3)) + +var varInitToConstDeclAmbient = constType; +>varInitToConstDeclAmbient : Symbol(varInitToConstDeclAmbient, Decl(uniqueSymbols.ts, 23, 3)) +>constType : Symbol(constType, Decl(uniqueSymbols.ts, 6, 13)) + +// declaration from initializer with type query +const constInitToConstCallWithTypeQuery: typeof constCall = constCall; +>constInitToConstCallWithTypeQuery : Symbol(constInitToConstCallWithTypeQuery, Decl(uniqueSymbols.ts, 26, 5)) +>constCall : Symbol(constCall, Decl(uniqueSymbols.ts, 1, 5)) +>constCall : Symbol(constCall, Decl(uniqueSymbols.ts, 1, 5)) + +const constInitToConstDeclAmbientWithTypeQuery: typeof constType = constType; +>constInitToConstDeclAmbientWithTypeQuery : Symbol(constInitToConstDeclAmbientWithTypeQuery, Decl(uniqueSymbols.ts, 27, 5)) +>constType : Symbol(constType, Decl(uniqueSymbols.ts, 6, 13)) +>constType : Symbol(constType, Decl(uniqueSymbols.ts, 6, 13)) + +// function return inference +function funcReturnConstCall() { return constCall; } +>funcReturnConstCall : Symbol(funcReturnConstCall, Decl(uniqueSymbols.ts, 27, 77)) +>constCall : Symbol(constCall, Decl(uniqueSymbols.ts, 1, 5)) + +function funcReturnLetCall() { return letCall; } +>funcReturnLetCall : Symbol(funcReturnLetCall, Decl(uniqueSymbols.ts, 30, 52)) +>letCall : Symbol(letCall, Decl(uniqueSymbols.ts, 2, 3)) + +function funcReturnVarCall() { return varCall; } +>funcReturnVarCall : Symbol(funcReturnVarCall, Decl(uniqueSymbols.ts, 31, 48)) +>varCall : Symbol(varCall, Decl(uniqueSymbols.ts, 3, 3)) + +// function return value with type query +function funcReturnConstCallWithTypeQuery(): typeof constCall { return constCall; } +>funcReturnConstCallWithTypeQuery : Symbol(funcReturnConstCallWithTypeQuery, Decl(uniqueSymbols.ts, 32, 48)) +>constCall : Symbol(constCall, Decl(uniqueSymbols.ts, 1, 5)) +>constCall : Symbol(constCall, Decl(uniqueSymbols.ts, 1, 5)) + +// generator function yield inference +function* genFuncYieldConstCall() { yield constCall; } +>genFuncYieldConstCall : Symbol(genFuncYieldConstCall, Decl(uniqueSymbols.ts, 35, 83)) +>constCall : Symbol(constCall, Decl(uniqueSymbols.ts, 1, 5)) + +function* genFuncYieldLetCall() { yield letCall; } +>genFuncYieldLetCall : Symbol(genFuncYieldLetCall, Decl(uniqueSymbols.ts, 38, 54)) +>letCall : Symbol(letCall, Decl(uniqueSymbols.ts, 2, 3)) + +function* genFuncYieldVarCall() { yield varCall; } +>genFuncYieldVarCall : Symbol(genFuncYieldVarCall, Decl(uniqueSymbols.ts, 39, 50)) +>varCall : Symbol(varCall, Decl(uniqueSymbols.ts, 3, 3)) + +// generator function yield with return type query +function* genFuncYieldConstCallWithTypeQuery(): IterableIterator { yield constCall; } +>genFuncYieldConstCallWithTypeQuery : Symbol(genFuncYieldConstCallWithTypeQuery, Decl(uniqueSymbols.ts, 40, 50)) +>IterableIterator : Symbol(IterableIterator, Decl(lib.es2015.iterable.d.ts, --, --)) +>constCall : Symbol(constCall, Decl(uniqueSymbols.ts, 1, 5)) +>constCall : Symbol(constCall, Decl(uniqueSymbols.ts, 1, 5)) + +// async function return inference +async function asyncFuncReturnConstCall() { return constCall; } +>asyncFuncReturnConstCall : Symbol(asyncFuncReturnConstCall, Decl(uniqueSymbols.ts, 43, 103)) +>constCall : Symbol(constCall, Decl(uniqueSymbols.ts, 1, 5)) + +async function asyncFuncReturnLetCall() { return letCall; } +>asyncFuncReturnLetCall : Symbol(asyncFuncReturnLetCall, Decl(uniqueSymbols.ts, 46, 63)) +>letCall : Symbol(letCall, Decl(uniqueSymbols.ts, 2, 3)) + +async function asyncFuncReturnVarCall() { return varCall; } +>asyncFuncReturnVarCall : Symbol(asyncFuncReturnVarCall, Decl(uniqueSymbols.ts, 47, 59)) +>varCall : Symbol(varCall, Decl(uniqueSymbols.ts, 3, 3)) + +// async generator function yield inference +async function* asyncGenFuncYieldConstCall() { yield constCall; } +>asyncGenFuncYieldConstCall : Symbol(asyncGenFuncYieldConstCall, Decl(uniqueSymbols.ts, 48, 59)) +>constCall : Symbol(constCall, Decl(uniqueSymbols.ts, 1, 5)) + +async function* asyncGenFuncYieldLetCall() { yield letCall; } +>asyncGenFuncYieldLetCall : Symbol(asyncGenFuncYieldLetCall, Decl(uniqueSymbols.ts, 51, 65)) +>letCall : Symbol(letCall, Decl(uniqueSymbols.ts, 2, 3)) + +async function* asyncGenFuncYieldVarCall() { yield varCall; } +>asyncGenFuncYieldVarCall : Symbol(asyncGenFuncYieldVarCall, Decl(uniqueSymbols.ts, 52, 61)) +>varCall : Symbol(varCall, Decl(uniqueSymbols.ts, 3, 3)) + +// classes +class C { +>C : Symbol(C, Decl(uniqueSymbols.ts, 53, 61)) + + static readonly readonlyStaticCall = Symbol(); +>readonlyStaticCall : Symbol(C.readonlyStaticCall, Decl(uniqueSymbols.ts, 56, 9)) +>Symbol : Symbol(Symbol, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --)) + + static readonly readonlyStaticType: symbol(); +>readonlyStaticType : Symbol(C.readonlyStaticType, Decl(uniqueSymbols.ts, 57, 50)) + + static readonly readonlyStaticTypeAndCall: symbol() = Symbol(); +>readonlyStaticTypeAndCall : Symbol(C.readonlyStaticTypeAndCall, Decl(uniqueSymbols.ts, 58, 49)) +>Symbol : Symbol(Symbol, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --)) + + static readwriteStaticCall = Symbol(); +>readwriteStaticCall : Symbol(C.readwriteStaticCall, Decl(uniqueSymbols.ts, 59, 67)) +>Symbol : Symbol(Symbol, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --)) + + readonly readonlyCall = Symbol(); +>readonlyCall : Symbol(C.readonlyCall, Decl(uniqueSymbols.ts, 60, 42)) +>Symbol : Symbol(Symbol, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --)) + + readwriteCall = Symbol(); +>readwriteCall : Symbol(C.readwriteCall, Decl(uniqueSymbols.ts, 62, 37)) +>Symbol : Symbol(Symbol, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --)) +} +declare const c: C; +>c : Symbol(c, Decl(uniqueSymbols.ts, 65, 13)) +>C : Symbol(C, Decl(uniqueSymbols.ts, 53, 61)) + +const constInitToCReadonlyStaticCall = C.readonlyStaticCall; +>constInitToCReadonlyStaticCall : Symbol(constInitToCReadonlyStaticCall, Decl(uniqueSymbols.ts, 67, 5)) +>C.readonlyStaticCall : Symbol(C.readonlyStaticCall, Decl(uniqueSymbols.ts, 56, 9)) +>C : Symbol(C, Decl(uniqueSymbols.ts, 53, 61)) +>readonlyStaticCall : Symbol(C.readonlyStaticCall, Decl(uniqueSymbols.ts, 56, 9)) + +const constInitToCReadonlyStaticType = C.readonlyStaticType; +>constInitToCReadonlyStaticType : Symbol(constInitToCReadonlyStaticType, Decl(uniqueSymbols.ts, 68, 5)) +>C.readonlyStaticType : Symbol(C.readonlyStaticType, Decl(uniqueSymbols.ts, 57, 50)) +>C : Symbol(C, Decl(uniqueSymbols.ts, 53, 61)) +>readonlyStaticType : Symbol(C.readonlyStaticType, Decl(uniqueSymbols.ts, 57, 50)) + +const constInitToCReadonlyStaticTypeAndCall = C.readonlyStaticTypeAndCall; +>constInitToCReadonlyStaticTypeAndCall : Symbol(constInitToCReadonlyStaticTypeAndCall, Decl(uniqueSymbols.ts, 69, 5)) +>C.readonlyStaticTypeAndCall : Symbol(C.readonlyStaticTypeAndCall, Decl(uniqueSymbols.ts, 58, 49)) +>C : Symbol(C, Decl(uniqueSymbols.ts, 53, 61)) +>readonlyStaticTypeAndCall : Symbol(C.readonlyStaticTypeAndCall, Decl(uniqueSymbols.ts, 58, 49)) + +const constInitToCReadwriteStaticCall = C.readwriteStaticCall; +>constInitToCReadwriteStaticCall : Symbol(constInitToCReadwriteStaticCall, Decl(uniqueSymbols.ts, 70, 5)) +>C.readwriteStaticCall : Symbol(C.readwriteStaticCall, Decl(uniqueSymbols.ts, 59, 67)) +>C : Symbol(C, Decl(uniqueSymbols.ts, 53, 61)) +>readwriteStaticCall : Symbol(C.readwriteStaticCall, Decl(uniqueSymbols.ts, 59, 67)) + +const constInitToCReadonlyStaticCallWithTypeQuery: typeof C.readonlyStaticCall = C.readonlyStaticCall; +>constInitToCReadonlyStaticCallWithTypeQuery : Symbol(constInitToCReadonlyStaticCallWithTypeQuery, Decl(uniqueSymbols.ts, 72, 5)) +>C.readonlyStaticCall : Symbol(C.readonlyStaticCall, Decl(uniqueSymbols.ts, 56, 9)) +>C : Symbol(C, Decl(uniqueSymbols.ts, 53, 61)) +>readonlyStaticCall : Symbol(C.readonlyStaticCall, Decl(uniqueSymbols.ts, 56, 9)) +>C.readonlyStaticCall : Symbol(C.readonlyStaticCall, Decl(uniqueSymbols.ts, 56, 9)) +>C : Symbol(C, Decl(uniqueSymbols.ts, 53, 61)) +>readonlyStaticCall : Symbol(C.readonlyStaticCall, Decl(uniqueSymbols.ts, 56, 9)) + +const constInitToCReadonlyStaticTypeWithTypeQuery: typeof C.readonlyStaticType = C.readonlyStaticType; +>constInitToCReadonlyStaticTypeWithTypeQuery : Symbol(constInitToCReadonlyStaticTypeWithTypeQuery, Decl(uniqueSymbols.ts, 73, 5)) +>C.readonlyStaticType : Symbol(C.readonlyStaticType, Decl(uniqueSymbols.ts, 57, 50)) +>C : Symbol(C, Decl(uniqueSymbols.ts, 53, 61)) +>readonlyStaticType : Symbol(C.readonlyStaticType, Decl(uniqueSymbols.ts, 57, 50)) +>C.readonlyStaticType : Symbol(C.readonlyStaticType, Decl(uniqueSymbols.ts, 57, 50)) +>C : Symbol(C, Decl(uniqueSymbols.ts, 53, 61)) +>readonlyStaticType : Symbol(C.readonlyStaticType, Decl(uniqueSymbols.ts, 57, 50)) + +const constInitToCReadonlyStaticTypeAndCallWithTypeQuery: typeof C.readonlyStaticTypeAndCall = C.readonlyStaticTypeAndCall; +>constInitToCReadonlyStaticTypeAndCallWithTypeQuery : Symbol(constInitToCReadonlyStaticTypeAndCallWithTypeQuery, Decl(uniqueSymbols.ts, 74, 5)) +>C.readonlyStaticTypeAndCall : Symbol(C.readonlyStaticTypeAndCall, Decl(uniqueSymbols.ts, 58, 49)) +>C : Symbol(C, Decl(uniqueSymbols.ts, 53, 61)) +>readonlyStaticTypeAndCall : Symbol(C.readonlyStaticTypeAndCall, Decl(uniqueSymbols.ts, 58, 49)) +>C.readonlyStaticTypeAndCall : Symbol(C.readonlyStaticTypeAndCall, Decl(uniqueSymbols.ts, 58, 49)) +>C : Symbol(C, Decl(uniqueSymbols.ts, 53, 61)) +>readonlyStaticTypeAndCall : Symbol(C.readonlyStaticTypeAndCall, Decl(uniqueSymbols.ts, 58, 49)) + +const constInitToCReadwriteStaticCallWithTypeQuery: typeof C.readwriteStaticCall = C.readwriteStaticCall; +>constInitToCReadwriteStaticCallWithTypeQuery : Symbol(constInitToCReadwriteStaticCallWithTypeQuery, Decl(uniqueSymbols.ts, 75, 5)) +>C.readwriteStaticCall : Symbol(C.readwriteStaticCall, Decl(uniqueSymbols.ts, 59, 67)) +>C : Symbol(C, Decl(uniqueSymbols.ts, 53, 61)) +>readwriteStaticCall : Symbol(C.readwriteStaticCall, Decl(uniqueSymbols.ts, 59, 67)) +>C.readwriteStaticCall : Symbol(C.readwriteStaticCall, Decl(uniqueSymbols.ts, 59, 67)) +>C : Symbol(C, Decl(uniqueSymbols.ts, 53, 61)) +>readwriteStaticCall : Symbol(C.readwriteStaticCall, Decl(uniqueSymbols.ts, 59, 67)) + +const constInitToCReadonlyCall = c.readonlyCall; +>constInitToCReadonlyCall : Symbol(constInitToCReadonlyCall, Decl(uniqueSymbols.ts, 77, 5)) +>c.readonlyCall : Symbol(C.readonlyCall, Decl(uniqueSymbols.ts, 60, 42)) +>c : Symbol(c, Decl(uniqueSymbols.ts, 65, 13)) +>readonlyCall : Symbol(C.readonlyCall, Decl(uniqueSymbols.ts, 60, 42)) + +const constInitToCReadwriteCall = c.readwriteCall; +>constInitToCReadwriteCall : Symbol(constInitToCReadwriteCall, Decl(uniqueSymbols.ts, 78, 5)) +>c.readwriteCall : Symbol(C.readwriteCall, Decl(uniqueSymbols.ts, 62, 37)) +>c : Symbol(c, Decl(uniqueSymbols.ts, 65, 13)) +>readwriteCall : Symbol(C.readwriteCall, Decl(uniqueSymbols.ts, 62, 37)) + +const constInitToCReadonlyCallWithTypeQuery: typeof c.readonlyCall = c.readonlyCall; +>constInitToCReadonlyCallWithTypeQuery : Symbol(constInitToCReadonlyCallWithTypeQuery, Decl(uniqueSymbols.ts, 79, 5)) +>c.readonlyCall : Symbol(C.readonlyCall, Decl(uniqueSymbols.ts, 60, 42)) +>c : Symbol(c, Decl(uniqueSymbols.ts, 65, 13)) +>readonlyCall : Symbol(C.readonlyCall, Decl(uniqueSymbols.ts, 60, 42)) +>c.readonlyCall : Symbol(C.readonlyCall, Decl(uniqueSymbols.ts, 60, 42)) +>c : Symbol(c, Decl(uniqueSymbols.ts, 65, 13)) +>readonlyCall : Symbol(C.readonlyCall, Decl(uniqueSymbols.ts, 60, 42)) + +const constInitToCReadwriteCallWithTypeQuery: typeof c.readwriteCall = c.readwriteCall; +>constInitToCReadwriteCallWithTypeQuery : Symbol(constInitToCReadwriteCallWithTypeQuery, Decl(uniqueSymbols.ts, 80, 5)) +>c.readwriteCall : Symbol(C.readwriteCall, Decl(uniqueSymbols.ts, 62, 37)) +>c : Symbol(c, Decl(uniqueSymbols.ts, 65, 13)) +>readwriteCall : Symbol(C.readwriteCall, Decl(uniqueSymbols.ts, 62, 37)) +>c.readwriteCall : Symbol(C.readwriteCall, Decl(uniqueSymbols.ts, 62, 37)) +>c : Symbol(c, Decl(uniqueSymbols.ts, 65, 13)) +>readwriteCall : Symbol(C.readwriteCall, Decl(uniqueSymbols.ts, 62, 37)) + +const constInitToCReadonlyCallWithIndexedAccess: C["readonlyCall"] = c.readonlyCall; +>constInitToCReadonlyCallWithIndexedAccess : Symbol(constInitToCReadonlyCallWithIndexedAccess, Decl(uniqueSymbols.ts, 81, 5)) +>C : Symbol(C, Decl(uniqueSymbols.ts, 53, 61)) +>c.readonlyCall : Symbol(C.readonlyCall, Decl(uniqueSymbols.ts, 60, 42)) +>c : Symbol(c, Decl(uniqueSymbols.ts, 65, 13)) +>readonlyCall : Symbol(C.readonlyCall, Decl(uniqueSymbols.ts, 60, 42)) + +const constInitToCReadwriteCallWithIndexedAccess: C["readwriteCall"] = c.readwriteCall; +>constInitToCReadwriteCallWithIndexedAccess : Symbol(constInitToCReadwriteCallWithIndexedAccess, Decl(uniqueSymbols.ts, 82, 5)) +>C : Symbol(C, Decl(uniqueSymbols.ts, 53, 61)) +>c.readwriteCall : Symbol(C.readwriteCall, Decl(uniqueSymbols.ts, 62, 37)) +>c : Symbol(c, Decl(uniqueSymbols.ts, 65, 13)) +>readwriteCall : Symbol(C.readwriteCall, Decl(uniqueSymbols.ts, 62, 37)) + +// interfaces +interface I { +>I : Symbol(I, Decl(uniqueSymbols.ts, 82, 87)) + + readonly readonlyType: symbol(); +>readonlyType : Symbol(I.readonlyType, Decl(uniqueSymbols.ts, 85, 13)) +} +declare const i: I; +>i : Symbol(i, Decl(uniqueSymbols.ts, 88, 13)) +>I : Symbol(I, Decl(uniqueSymbols.ts, 82, 87)) + +const constInitToIReadonlyType = i.readonlyType; +>constInitToIReadonlyType : Symbol(constInitToIReadonlyType, Decl(uniqueSymbols.ts, 90, 5)) +>i.readonlyType : Symbol(I.readonlyType, Decl(uniqueSymbols.ts, 85, 13)) +>i : Symbol(i, Decl(uniqueSymbols.ts, 88, 13)) +>readonlyType : Symbol(I.readonlyType, Decl(uniqueSymbols.ts, 85, 13)) + +const constInitToIReadonlyTypeWithTypeQuery: typeof i.readonlyType = i.readonlyType; +>constInitToIReadonlyTypeWithTypeQuery : Symbol(constInitToIReadonlyTypeWithTypeQuery, Decl(uniqueSymbols.ts, 91, 5)) +>i.readonlyType : Symbol(I.readonlyType, Decl(uniqueSymbols.ts, 85, 13)) +>i : Symbol(i, Decl(uniqueSymbols.ts, 88, 13)) +>readonlyType : Symbol(I.readonlyType, Decl(uniqueSymbols.ts, 85, 13)) +>i.readonlyType : Symbol(I.readonlyType, Decl(uniqueSymbols.ts, 85, 13)) +>i : Symbol(i, Decl(uniqueSymbols.ts, 88, 13)) +>readonlyType : Symbol(I.readonlyType, Decl(uniqueSymbols.ts, 85, 13)) + +const constInitToIReadonlyTypeWithIndexedAccess: I["readonlyType"] = i.readonlyType; +>constInitToIReadonlyTypeWithIndexedAccess : Symbol(constInitToIReadonlyTypeWithIndexedAccess, Decl(uniqueSymbols.ts, 92, 5)) +>I : Symbol(I, Decl(uniqueSymbols.ts, 82, 87)) +>i.readonlyType : Symbol(I.readonlyType, Decl(uniqueSymbols.ts, 85, 13)) +>i : Symbol(i, Decl(uniqueSymbols.ts, 88, 13)) +>readonlyType : Symbol(I.readonlyType, Decl(uniqueSymbols.ts, 85, 13)) + +// type literals +type L = { +>L : Symbol(L, Decl(uniqueSymbols.ts, 92, 84)) + + readonly readonlyType: symbol(); +>readonlyType : Symbol(readonlyType, Decl(uniqueSymbols.ts, 95, 10)) + + nested: { +>nested : Symbol(nested, Decl(uniqueSymbols.ts, 96, 36)) + + readonly readonlyNestedType: symbol(); +>readonlyNestedType : Symbol(readonlyNestedType, Decl(uniqueSymbols.ts, 97, 13)) + } +}; +declare const l: L; +>l : Symbol(l, Decl(uniqueSymbols.ts, 101, 13)) +>L : Symbol(L, Decl(uniqueSymbols.ts, 92, 84)) + +const constInitToLReadonlyType = l.readonlyType; +>constInitToLReadonlyType : Symbol(constInitToLReadonlyType, Decl(uniqueSymbols.ts, 103, 5)) +>l.readonlyType : Symbol(readonlyType, Decl(uniqueSymbols.ts, 95, 10)) +>l : Symbol(l, Decl(uniqueSymbols.ts, 101, 13)) +>readonlyType : Symbol(readonlyType, Decl(uniqueSymbols.ts, 95, 10)) + +const constInitToLReadonlyNestedType = l.nested.readonlyNestedType; +>constInitToLReadonlyNestedType : Symbol(constInitToLReadonlyNestedType, Decl(uniqueSymbols.ts, 104, 5)) +>l.nested.readonlyNestedType : Symbol(readonlyNestedType, Decl(uniqueSymbols.ts, 97, 13)) +>l.nested : Symbol(nested, Decl(uniqueSymbols.ts, 96, 36)) +>l : Symbol(l, Decl(uniqueSymbols.ts, 101, 13)) +>nested : Symbol(nested, Decl(uniqueSymbols.ts, 96, 36)) +>readonlyNestedType : Symbol(readonlyNestedType, Decl(uniqueSymbols.ts, 97, 13)) + +const constInitToLReadonlyTypeWithTypeQuery: typeof l.readonlyType = l.readonlyType; +>constInitToLReadonlyTypeWithTypeQuery : Symbol(constInitToLReadonlyTypeWithTypeQuery, Decl(uniqueSymbols.ts, 105, 5)) +>l.readonlyType : Symbol(readonlyType, Decl(uniqueSymbols.ts, 95, 10)) +>l : Symbol(l, Decl(uniqueSymbols.ts, 101, 13)) +>readonlyType : Symbol(readonlyType, Decl(uniqueSymbols.ts, 95, 10)) +>l.readonlyType : Symbol(readonlyType, Decl(uniqueSymbols.ts, 95, 10)) +>l : Symbol(l, Decl(uniqueSymbols.ts, 101, 13)) +>readonlyType : Symbol(readonlyType, Decl(uniqueSymbols.ts, 95, 10)) + +const constInitToLReadonlyNestedTypeWithTypeQuery: typeof l.nested.readonlyNestedType = l.nested.readonlyNestedType; +>constInitToLReadonlyNestedTypeWithTypeQuery : Symbol(constInitToLReadonlyNestedTypeWithTypeQuery, Decl(uniqueSymbols.ts, 106, 5)) +>l.nested.readonlyNestedType : Symbol(readonlyNestedType, Decl(uniqueSymbols.ts, 97, 13)) +>l.nested : Symbol(nested, Decl(uniqueSymbols.ts, 96, 36)) +>l : Symbol(l, Decl(uniqueSymbols.ts, 101, 13)) +>nested : Symbol(nested, Decl(uniqueSymbols.ts, 96, 36)) +>readonlyNestedType : Symbol(readonlyNestedType, Decl(uniqueSymbols.ts, 97, 13)) +>l.nested.readonlyNestedType : Symbol(readonlyNestedType, Decl(uniqueSymbols.ts, 97, 13)) +>l.nested : Symbol(nested, Decl(uniqueSymbols.ts, 96, 36)) +>l : Symbol(l, Decl(uniqueSymbols.ts, 101, 13)) +>nested : Symbol(nested, Decl(uniqueSymbols.ts, 96, 36)) +>readonlyNestedType : Symbol(readonlyNestedType, Decl(uniqueSymbols.ts, 97, 13)) + +const constInitToLReadonlyTypeWithIndexedAccess: L["readonlyType"] = l.readonlyType; +>constInitToLReadonlyTypeWithIndexedAccess : Symbol(constInitToLReadonlyTypeWithIndexedAccess, Decl(uniqueSymbols.ts, 107, 5)) +>L : Symbol(L, Decl(uniqueSymbols.ts, 92, 84)) +>l.readonlyType : Symbol(readonlyType, Decl(uniqueSymbols.ts, 95, 10)) +>l : Symbol(l, Decl(uniqueSymbols.ts, 101, 13)) +>readonlyType : Symbol(readonlyType, Decl(uniqueSymbols.ts, 95, 10)) + +const constInitToLReadonlyNestedTypeWithIndexedAccess: L["nested"]["readonlyNestedType"] = l.nested.readonlyNestedType; +>constInitToLReadonlyNestedTypeWithIndexedAccess : Symbol(constInitToLReadonlyNestedTypeWithIndexedAccess, Decl(uniqueSymbols.ts, 108, 5)) +>L : Symbol(L, Decl(uniqueSymbols.ts, 92, 84)) +>l.nested.readonlyNestedType : Symbol(readonlyNestedType, Decl(uniqueSymbols.ts, 97, 13)) +>l.nested : Symbol(nested, Decl(uniqueSymbols.ts, 96, 36)) +>l : Symbol(l, Decl(uniqueSymbols.ts, 101, 13)) +>nested : Symbol(nested, Decl(uniqueSymbols.ts, 96, 36)) +>readonlyNestedType : Symbol(readonlyNestedType, Decl(uniqueSymbols.ts, 97, 13)) + +// type argument inference +const promiseForConstCall = Promise.resolve(constCall); +>promiseForConstCall : Symbol(promiseForConstCall, Decl(uniqueSymbols.ts, 111, 5)) +>Promise.resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>constCall : Symbol(constCall, Decl(uniqueSymbols.ts, 1, 5)) + +const arrayOfConstCall = [constCall]; +>arrayOfConstCall : Symbol(arrayOfConstCall, Decl(uniqueSymbols.ts, 112, 5)) +>constCall : Symbol(constCall, Decl(uniqueSymbols.ts, 1, 5)) + diff --git a/tests/baselines/reference/uniqueSymbols.types b/tests/baselines/reference/uniqueSymbols.types new file mode 100644 index 00000000000..956f6656362 --- /dev/null +++ b/tests/baselines/reference/uniqueSymbols.types @@ -0,0 +1,416 @@ +=== tests/cases/conformance/types/uniqueSymbol/uniqueSymbols.ts === +// declarations with call initializer +const constCall = Symbol(); +>constCall : symbol() +>Symbol() : symbol() +>Symbol : SymbolConstructor + +let letCall = Symbol(); +>letCall : symbol +>Symbol() : symbol +>Symbol : SymbolConstructor + +var varCall = Symbol(); +>varCall : symbol +>Symbol() : symbol +>Symbol : SymbolConstructor + +// ambient declaration with type +declare const constType: symbol(); +>constType : symbol() + +// declaration with type and call initializer +const constTypeAndCall: symbol() = Symbol(); +>constTypeAndCall : symbol() +>Symbol() : symbol() +>Symbol : SymbolConstructor + +// declaration from initializer +const constInitToConstCall = constCall; +>constInitToConstCall : symbol +>constCall : symbol() + +const constInitToLetCall = letCall; +>constInitToLetCall : symbol +>letCall : symbol + +const constInitToVarCall = varCall; +>constInitToVarCall : symbol +>varCall : symbol + +const constInitToConstDeclAmbient = constType; +>constInitToConstDeclAmbient : symbol +>constType : symbol() + +let letInitToConstCall = constCall; +>letInitToConstCall : symbol +>constCall : symbol() + +let letInitToLetCall = letCall; +>letInitToLetCall : symbol +>letCall : symbol + +let letInitToVarCall = varCall; +>letInitToVarCall : symbol +>varCall : symbol + +let letInitToConstDeclAmbient = constType; +>letInitToConstDeclAmbient : symbol +>constType : symbol() + +var varInitToConstCall = constCall; +>varInitToConstCall : symbol +>constCall : symbol() + +var varInitToLetCall = letCall; +>varInitToLetCall : symbol +>letCall : symbol + +var varInitToVarCall = varCall; +>varInitToVarCall : symbol +>varCall : symbol + +var varInitToConstDeclAmbient = constType; +>varInitToConstDeclAmbient : symbol +>constType : symbol() + +// declaration from initializer with type query +const constInitToConstCallWithTypeQuery: typeof constCall = constCall; +>constInitToConstCallWithTypeQuery : symbol +>constCall : symbol() +>constCall : symbol() + +const constInitToConstDeclAmbientWithTypeQuery: typeof constType = constType; +>constInitToConstDeclAmbientWithTypeQuery : symbol +>constType : symbol() +>constType : symbol() + +// function return inference +function funcReturnConstCall() { return constCall; } +>funcReturnConstCall : () => symbol +>constCall : symbol() + +function funcReturnLetCall() { return letCall; } +>funcReturnLetCall : () => symbol +>letCall : symbol + +function funcReturnVarCall() { return varCall; } +>funcReturnVarCall : () => symbol +>varCall : symbol + +// function return value with type query +function funcReturnConstCallWithTypeQuery(): typeof constCall { return constCall; } +>funcReturnConstCallWithTypeQuery : () => symbol() +>constCall : symbol() +>constCall : symbol() + +// generator function yield inference +function* genFuncYieldConstCall() { yield constCall; } +>genFuncYieldConstCall : () => IterableIterator +>yield constCall : any +>constCall : symbol() + +function* genFuncYieldLetCall() { yield letCall; } +>genFuncYieldLetCall : () => IterableIterator +>yield letCall : any +>letCall : symbol + +function* genFuncYieldVarCall() { yield varCall; } +>genFuncYieldVarCall : () => IterableIterator +>yield varCall : any +>varCall : symbol + +// generator function yield with return type query +function* genFuncYieldConstCallWithTypeQuery(): IterableIterator { yield constCall; } +>genFuncYieldConstCallWithTypeQuery : () => IterableIterator +>IterableIterator : IterableIterator +>constCall : symbol() +>yield constCall : any +>constCall : symbol() + +// async function return inference +async function asyncFuncReturnConstCall() { return constCall; } +>asyncFuncReturnConstCall : () => Promise +>constCall : symbol() + +async function asyncFuncReturnLetCall() { return letCall; } +>asyncFuncReturnLetCall : () => Promise +>letCall : symbol + +async function asyncFuncReturnVarCall() { return varCall; } +>asyncFuncReturnVarCall : () => Promise +>varCall : symbol + +// async generator function yield inference +async function* asyncGenFuncYieldConstCall() { yield constCall; } +>asyncGenFuncYieldConstCall : () => AsyncIterableIterator +>yield constCall : any +>constCall : symbol() + +async function* asyncGenFuncYieldLetCall() { yield letCall; } +>asyncGenFuncYieldLetCall : () => AsyncIterableIterator +>yield letCall : any +>letCall : symbol + +async function* asyncGenFuncYieldVarCall() { yield varCall; } +>asyncGenFuncYieldVarCall : () => AsyncIterableIterator +>yield varCall : any +>varCall : symbol + +// classes +class C { +>C : C + + static readonly readonlyStaticCall = Symbol(); +>readonlyStaticCall : symbol() +>Symbol() : symbol() +>Symbol : SymbolConstructor + + static readonly readonlyStaticType: symbol(); +>readonlyStaticType : symbol() + + static readonly readonlyStaticTypeAndCall: symbol() = Symbol(); +>readonlyStaticTypeAndCall : symbol() +>Symbol() : symbol() +>Symbol : SymbolConstructor + + static readwriteStaticCall = Symbol(); +>readwriteStaticCall : symbol +>Symbol() : symbol +>Symbol : SymbolConstructor + + readonly readonlyCall = Symbol(); +>readonlyCall : symbol +>Symbol() : symbol +>Symbol : SymbolConstructor + + readwriteCall = Symbol(); +>readwriteCall : symbol +>Symbol() : symbol +>Symbol : SymbolConstructor +} +declare const c: C; +>c : C +>C : C + +const constInitToCReadonlyStaticCall = C.readonlyStaticCall; +>constInitToCReadonlyStaticCall : symbol +>C.readonlyStaticCall : symbol() +>C : typeof C +>readonlyStaticCall : symbol() + +const constInitToCReadonlyStaticType = C.readonlyStaticType; +>constInitToCReadonlyStaticType : symbol +>C.readonlyStaticType : symbol() +>C : typeof C +>readonlyStaticType : symbol() + +const constInitToCReadonlyStaticTypeAndCall = C.readonlyStaticTypeAndCall; +>constInitToCReadonlyStaticTypeAndCall : symbol +>C.readonlyStaticTypeAndCall : symbol() +>C : typeof C +>readonlyStaticTypeAndCall : symbol() + +const constInitToCReadwriteStaticCall = C.readwriteStaticCall; +>constInitToCReadwriteStaticCall : symbol +>C.readwriteStaticCall : symbol +>C : typeof C +>readwriteStaticCall : symbol + +const constInitToCReadonlyStaticCallWithTypeQuery: typeof C.readonlyStaticCall = C.readonlyStaticCall; +>constInitToCReadonlyStaticCallWithTypeQuery : symbol +>C.readonlyStaticCall : symbol() +>C : typeof C +>readonlyStaticCall : symbol() +>C.readonlyStaticCall : symbol() +>C : typeof C +>readonlyStaticCall : symbol() + +const constInitToCReadonlyStaticTypeWithTypeQuery: typeof C.readonlyStaticType = C.readonlyStaticType; +>constInitToCReadonlyStaticTypeWithTypeQuery : symbol +>C.readonlyStaticType : symbol() +>C : typeof C +>readonlyStaticType : symbol() +>C.readonlyStaticType : symbol() +>C : typeof C +>readonlyStaticType : symbol() + +const constInitToCReadonlyStaticTypeAndCallWithTypeQuery: typeof C.readonlyStaticTypeAndCall = C.readonlyStaticTypeAndCall; +>constInitToCReadonlyStaticTypeAndCallWithTypeQuery : symbol +>C.readonlyStaticTypeAndCall : symbol() +>C : typeof C +>readonlyStaticTypeAndCall : symbol() +>C.readonlyStaticTypeAndCall : symbol() +>C : typeof C +>readonlyStaticTypeAndCall : symbol() + +const constInitToCReadwriteStaticCallWithTypeQuery: typeof C.readwriteStaticCall = C.readwriteStaticCall; +>constInitToCReadwriteStaticCallWithTypeQuery : symbol +>C.readwriteStaticCall : symbol +>C : typeof C +>readwriteStaticCall : symbol +>C.readwriteStaticCall : symbol +>C : typeof C +>readwriteStaticCall : symbol + +const constInitToCReadonlyCall = c.readonlyCall; +>constInitToCReadonlyCall : symbol +>c.readonlyCall : symbol +>c : C +>readonlyCall : symbol + +const constInitToCReadwriteCall = c.readwriteCall; +>constInitToCReadwriteCall : symbol +>c.readwriteCall : symbol +>c : C +>readwriteCall : symbol + +const constInitToCReadonlyCallWithTypeQuery: typeof c.readonlyCall = c.readonlyCall; +>constInitToCReadonlyCallWithTypeQuery : symbol +>c.readonlyCall : symbol +>c : C +>readonlyCall : symbol +>c.readonlyCall : symbol +>c : C +>readonlyCall : symbol + +const constInitToCReadwriteCallWithTypeQuery: typeof c.readwriteCall = c.readwriteCall; +>constInitToCReadwriteCallWithTypeQuery : symbol +>c.readwriteCall : symbol +>c : C +>readwriteCall : symbol +>c.readwriteCall : symbol +>c : C +>readwriteCall : symbol + +const constInitToCReadonlyCallWithIndexedAccess: C["readonlyCall"] = c.readonlyCall; +>constInitToCReadonlyCallWithIndexedAccess : symbol +>C : C +>c.readonlyCall : symbol +>c : C +>readonlyCall : symbol + +const constInitToCReadwriteCallWithIndexedAccess: C["readwriteCall"] = c.readwriteCall; +>constInitToCReadwriteCallWithIndexedAccess : symbol +>C : C +>c.readwriteCall : symbol +>c : C +>readwriteCall : symbol + +// interfaces +interface I { +>I : I + + readonly readonlyType: symbol(); +>readonlyType : symbol() +} +declare const i: I; +>i : I +>I : I + +const constInitToIReadonlyType = i.readonlyType; +>constInitToIReadonlyType : symbol +>i.readonlyType : symbol() +>i : I +>readonlyType : symbol() + +const constInitToIReadonlyTypeWithTypeQuery: typeof i.readonlyType = i.readonlyType; +>constInitToIReadonlyTypeWithTypeQuery : symbol +>i.readonlyType : symbol() +>i : I +>readonlyType : symbol() +>i.readonlyType : symbol() +>i : I +>readonlyType : symbol() + +const constInitToIReadonlyTypeWithIndexedAccess: I["readonlyType"] = i.readonlyType; +>constInitToIReadonlyTypeWithIndexedAccess : symbol +>I : I +>i.readonlyType : symbol() +>i : I +>readonlyType : symbol() + +// type literals +type L = { +>L : L + + readonly readonlyType: symbol(); +>readonlyType : symbol() + + nested: { +>nested : { readonly readonlyNestedType: symbol(); } + + readonly readonlyNestedType: symbol(); +>readonlyNestedType : symbol() + } +}; +declare const l: L; +>l : L +>L : L + +const constInitToLReadonlyType = l.readonlyType; +>constInitToLReadonlyType : symbol +>l.readonlyType : symbol() +>l : L +>readonlyType : symbol() + +const constInitToLReadonlyNestedType = l.nested.readonlyNestedType; +>constInitToLReadonlyNestedType : symbol +>l.nested.readonlyNestedType : symbol() +>l.nested : { readonly readonlyNestedType: symbol(); } +>l : L +>nested : { readonly readonlyNestedType: symbol(); } +>readonlyNestedType : symbol() + +const constInitToLReadonlyTypeWithTypeQuery: typeof l.readonlyType = l.readonlyType; +>constInitToLReadonlyTypeWithTypeQuery : symbol +>l.readonlyType : symbol() +>l : L +>readonlyType : symbol() +>l.readonlyType : symbol() +>l : L +>readonlyType : symbol() + +const constInitToLReadonlyNestedTypeWithTypeQuery: typeof l.nested.readonlyNestedType = l.nested.readonlyNestedType; +>constInitToLReadonlyNestedTypeWithTypeQuery : symbol +>l.nested.readonlyNestedType : symbol() +>l.nested : { readonly readonlyNestedType: symbol(); } +>l : L +>nested : { readonly readonlyNestedType: symbol(); } +>readonlyNestedType : symbol() +>l.nested.readonlyNestedType : symbol() +>l.nested : { readonly readonlyNestedType: symbol(); } +>l : L +>nested : { readonly readonlyNestedType: symbol(); } +>readonlyNestedType : symbol() + +const constInitToLReadonlyTypeWithIndexedAccess: L["readonlyType"] = l.readonlyType; +>constInitToLReadonlyTypeWithIndexedAccess : symbol +>L : L +>l.readonlyType : symbol() +>l : L +>readonlyType : symbol() + +const constInitToLReadonlyNestedTypeWithIndexedAccess: L["nested"]["readonlyNestedType"] = l.nested.readonlyNestedType; +>constInitToLReadonlyNestedTypeWithIndexedAccess : symbol +>L : L +>l.nested.readonlyNestedType : symbol() +>l.nested : { readonly readonlyNestedType: symbol(); } +>l : L +>nested : { readonly readonlyNestedType: symbol(); } +>readonlyNestedType : symbol() + +// type argument inference +const promiseForConstCall = Promise.resolve(constCall); +>promiseForConstCall : Promise +>Promise.resolve(constCall) : Promise +>Promise.resolve : { (value: T | PromiseLike): Promise; (): Promise; } +>Promise : PromiseConstructor +>resolve : { (value: T | PromiseLike): Promise; (): Promise; } +>constCall : symbol() + +const arrayOfConstCall = [constCall]; +>arrayOfConstCall : symbol[] +>[constCall] : symbol[] +>constCall : symbol() + diff --git a/tests/baselines/reference/uniqueSymbolsErrors.errors.txt b/tests/baselines/reference/uniqueSymbolsErrors.errors.txt new file mode 100644 index 00000000000..95c9132fb75 --- /dev/null +++ b/tests/baselines/reference/uniqueSymbolsErrors.errors.txt @@ -0,0 +1,265 @@ +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(2,19): error TS1337: Unique 'symbol()' types may not be used on a variable declaration with a binding name. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(3,13): error TS1336: A variable whose type is a unique 'symbol()' type must be 'const'. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(4,13): error TS1336: A variable whose type is a unique 'symbol()' type must be 'const'. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(7,38): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(8,45): error TS1331: Unique 'symbol()' types are not allowed in an array type. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(9,39): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(10,40): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(11,53): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(12,59): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(13,50): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(17,44): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(19,14): error TS1335: A property of a class whose type is a unique 'symbol()' type must be both 'static' and 'readonly'. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(20,5): error TS1335: A property of a class whose type is a unique 'symbol()' type must be both 'static' and 'readonly'. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(21,25): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(22,33): error TS1331: Unique 'symbol()' types are not allowed in an array type. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(23,26): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(24,27): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(25,40): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(26,46): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(27,37): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(28,26): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(29,28): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(31,12): error TS1335: A property of a class whose type is a unique 'symbol()' type must be both 'static' and 'readonly'. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(32,38): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(33,46): error TS1331: Unique 'symbol()' types are not allowed in an array type. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(34,39): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(35,40): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(36,53): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(37,59): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(38,50): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(39,39): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(40,41): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(45,5): error TS1334: A property of an interface or type literal whose type is a unique 'symbol()' type must be 'readonly'. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(46,25): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(47,33): error TS1331: Unique 'symbol()' types are not allowed in an array type. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(48,26): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(49,27): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(50,40): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(51,46): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(52,37): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(57,5): error TS1334: A property of an interface or type literal whose type is a unique 'symbol()' type must be 'readonly'. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(58,25): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(59,33): error TS1331: Unique 'symbol()' types are not allowed in an array type. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(60,26): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(61,27): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(62,40): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(63,46): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(64,37): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(68,21): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(69,52): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(70,49): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(73,44): error TS1339: Unique 'symbol()' types are not allowed here. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(74,33): error TS1331: Unique 'symbol()' types are not allowed in an array type. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(75,34): error TS1332: Unique 'symbol()' types are not allowed in a tuple type. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(78,51): error TS1333: Unique 'symbol()' types are not allowed in a mapped type. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(81,29): error TS1329: Unique 'symbol()' types are not allowed in a union type. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(81,40): error TS1329: Unique 'symbol()' types are not allowed in a union type. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(82,36): error TS1329: Unique 'symbol()' types are not allowed in a union type. +tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts(82,47): error TS1329: Unique 'symbol()' types are not allowed in a union type. + + +==== tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts (59 errors) ==== + // declarations + declare const {}: symbol(); + ~~~~~~~~ +!!! error TS1337: Unique 'symbol()' types may not be used on a variable declaration with a binding name. + declare let invalidLetType: symbol(); + ~~~~~~~~~~~~~~ +!!! error TS1336: A variable whose type is a unique 'symbol()' type must be 'const'. + declare var invalidVarType: symbol(); + ~~~~~~~~~~~~~~ +!!! error TS1336: A variable whose type is a unique 'symbol()' type must be 'const'. + + // function arguments and return types + declare function invalidArgType(arg: symbol()): void; + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + declare function invalidRestArgType(...arg: symbol()[]): void; + ~~~~~~~~ +!!! error TS1331: Unique 'symbol()' types are not allowed in an array type. + declare function invalidReturnType(): symbol(); + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + declare function invalidThisType(this: symbol()): void; + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + declare function invalidTypePredicate(n: any): n is symbol(); + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + declare function invalidTypeParameterConstraint(): void; + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + declare function invalidTypeParameterDefault(): void; + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + + // classes + class InvalidClass { + constructor(invalidConstructorArgType: symbol()) {} + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + + readonly invalidReadonlyPropertyType: symbol(); + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1335: A property of a class whose type is a unique 'symbol()' type must be both 'static' and 'readonly'. + invalidPropertyType: symbol(); + ~~~~~~~~~~~~~~~~~~~ +!!! error TS1335: A property of a class whose type is a unique 'symbol()' type must be both 'static' and 'readonly'. + invalidArgType(arg: symbol()): void { return; } + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + invalidRestArgType(...args: symbol()[]): void { return; } + ~~~~~~~~ +!!! error TS1331: Unique 'symbol()' types are not allowed in an array type. + invalidReturnType(): symbol() { return; } + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + invalidThisType(this: symbol()): void { return; } + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + invalidTypePredicate(n: any): n is symbol() { return; } + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + invalidTypeParameterConstraint(): void { return; } + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + invalidTypeParameterDefault(): void { return; } + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + get invalidGetter(): symbol() { return; } + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + set invalidSetter(arg: symbol()) { return; } + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + + static invalidStaticPropertyType: symbol(); + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1335: A property of a class whose type is a unique 'symbol()' type must be both 'static' and 'readonly'. + static invalidStaticArgType(arg: symbol()): void { return; } + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + static invalidStaticRestArgType(...args: symbol()[]): void { return; } + ~~~~~~~~ +!!! error TS1331: Unique 'symbol()' types are not allowed in an array type. + static invalidStaticReturnType(): symbol() { return; } + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + static invalidStaticThisType(this: symbol()): void { return; } + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + static invalidStaticTypePredicate(n: any): n is symbol() { return; } + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + static invalidStaticTypeParameterConstraint(): void { return; } + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + static invalidStaticTypeParameterDefault(): void { return; } + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + static get invalidStaticGetter(): symbol() { return; } + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + static set invalidStaticSetter(arg: symbol()) { return; } + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + } + + // interfaces + interface InvalidInterface { + invalidPropertyType: symbol(); + ~~~~~~~~~~~~~~~~~~~ +!!! error TS1334: A property of an interface or type literal whose type is a unique 'symbol()' type must be 'readonly'. + invalidArgType(arg: symbol()): void; + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + invalidRestArgType(...args: symbol()[]): void; + ~~~~~~~~ +!!! error TS1331: Unique 'symbol()' types are not allowed in an array type. + invalidReturnType(): symbol(); + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + invalidThisType(this: symbol()); + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + invalidTypePredicate(n: any): n is symbol() + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + invalidTypeParameterConstraint(): void; + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + invalidTypeParameterDefault(): void; + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + } + + // type literals + type InvalidTypeLiteral = { + invalidPropertyType: symbol(); + ~~~~~~~~~~~~~~~~~~~ +!!! error TS1334: A property of an interface or type literal whose type is a unique 'symbol()' type must be 'readonly'. + invalidArgType(arg: symbol()): void; + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + invalidRestArgType(...args: symbol()[]): void; + ~~~~~~~~ +!!! error TS1331: Unique 'symbol()' types are not allowed in an array type. + invalidReturnType(): symbol(); + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + invalidThisType(this: symbol()); + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + invalidTypePredicate(n: any): n is symbol() + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + invalidTypeParameterConstraint(): void; + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + invalidTypeParameterDefault(): void; + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + }; + + // type alias + type InvalidAlias = symbol(); + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + type InvalidAliasTypeParameterConstraint = never; + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + type InvalidAliasTypeParameterDefault = never; + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + + // type references + declare const invalidTypeArgument: Promise; + ~~~~~~~~ +!!! error TS1339: Unique 'symbol()' types are not allowed here. + declare const invalidArrayType: symbol()[]; + ~~~~~~~~ +!!! error TS1331: Unique 'symbol()' types are not allowed in an array type. + declare const invalidTupleType: [symbol()]; + ~~~~~~~~ +!!! error TS1332: Unique 'symbol()' types are not allowed in a tuple type. + + // mapped types + declare const invalidMappedType: { [P in string]: symbol() }; + ~~~~~~~~ +!!! error TS1333: Unique 'symbol()' types are not allowed in a mapped type. + + // unions/intersection + declare const invalidUnion: symbol() | symbol(); + ~~~~~~~~ +!!! error TS1329: Unique 'symbol()' types are not allowed in a union type. + ~~~~~~~~ +!!! error TS1329: Unique 'symbol()' types are not allowed in a union type. + declare const invalidIntersection: symbol() | symbol(); + ~~~~~~~~ +!!! error TS1329: Unique 'symbol()' types are not allowed in a union type. + ~~~~~~~~ +!!! error TS1329: Unique 'symbol()' types are not allowed in a union type. + + + \ No newline at end of file diff --git a/tests/baselines/reference/uniqueSymbolsErrors.js b/tests/baselines/reference/uniqueSymbolsErrors.js new file mode 100644 index 00000000000..806e28a7178 --- /dev/null +++ b/tests/baselines/reference/uniqueSymbolsErrors.js @@ -0,0 +1,110 @@ +//// [uniqueSymbolsErrors.ts] +// declarations +declare const {}: symbol(); +declare let invalidLetType: symbol(); +declare var invalidVarType: symbol(); + +// function arguments and return types +declare function invalidArgType(arg: symbol()): void; +declare function invalidRestArgType(...arg: symbol()[]): void; +declare function invalidReturnType(): symbol(); +declare function invalidThisType(this: symbol()): void; +declare function invalidTypePredicate(n: any): n is symbol(); +declare function invalidTypeParameterConstraint(): void; +declare function invalidTypeParameterDefault(): void; + +// classes +class InvalidClass { + constructor(invalidConstructorArgType: symbol()) {} + + readonly invalidReadonlyPropertyType: symbol(); + invalidPropertyType: symbol(); + invalidArgType(arg: symbol()): void { return; } + invalidRestArgType(...args: symbol()[]): void { return; } + invalidReturnType(): symbol() { return; } + invalidThisType(this: symbol()): void { return; } + invalidTypePredicate(n: any): n is symbol() { return; } + invalidTypeParameterConstraint(): void { return; } + invalidTypeParameterDefault(): void { return; } + get invalidGetter(): symbol() { return; } + set invalidSetter(arg: symbol()) { return; } + + static invalidStaticPropertyType: symbol(); + static invalidStaticArgType(arg: symbol()): void { return; } + static invalidStaticRestArgType(...args: symbol()[]): void { return; } + static invalidStaticReturnType(): symbol() { return; } + static invalidStaticThisType(this: symbol()): void { return; } + static invalidStaticTypePredicate(n: any): n is symbol() { return; } + static invalidStaticTypeParameterConstraint(): void { return; } + static invalidStaticTypeParameterDefault(): void { return; } + static get invalidStaticGetter(): symbol() { return; } + static set invalidStaticSetter(arg: symbol()) { return; } +} + +// interfaces +interface InvalidInterface { + invalidPropertyType: symbol(); + invalidArgType(arg: symbol()): void; + invalidRestArgType(...args: symbol()[]): void; + invalidReturnType(): symbol(); + invalidThisType(this: symbol()); + invalidTypePredicate(n: any): n is symbol() + invalidTypeParameterConstraint(): void; + invalidTypeParameterDefault(): void; +} + +// type literals +type InvalidTypeLiteral = { + invalidPropertyType: symbol(); + invalidArgType(arg: symbol()): void; + invalidRestArgType(...args: symbol()[]): void; + invalidReturnType(): symbol(); + invalidThisType(this: symbol()); + invalidTypePredicate(n: any): n is symbol() + invalidTypeParameterConstraint(): void; + invalidTypeParameterDefault(): void; +}; + +// type alias +type InvalidAlias = symbol(); +type InvalidAliasTypeParameterConstraint = never; +type InvalidAliasTypeParameterDefault = never; + +// type references +declare const invalidTypeArgument: Promise; +declare const invalidArrayType: symbol()[]; +declare const invalidTupleType: [symbol()]; + +// mapped types +declare const invalidMappedType: { [P in string]: symbol() }; + +// unions/intersection +declare const invalidUnion: symbol() | symbol(); +declare const invalidIntersection: symbol() | symbol(); + + + + +//// [uniqueSymbolsErrors.js] +// classes +class InvalidClass { + constructor(invalidConstructorArgType) { } + invalidArgType(arg) { return; } + invalidRestArgType(...args) { return; } + invalidReturnType() { return; } + invalidThisType() { return; } + invalidTypePredicate(n) { return; } + invalidTypeParameterConstraint() { return; } + invalidTypeParameterDefault() { return; } + get invalidGetter() { return; } + set invalidSetter(arg) { return; } + static invalidStaticArgType(arg) { return; } + static invalidStaticRestArgType(...args) { return; } + static invalidStaticReturnType() { return; } + static invalidStaticThisType() { return; } + static invalidStaticTypePredicate(n) { return; } + static invalidStaticTypeParameterConstraint() { return; } + static invalidStaticTypeParameterDefault() { return; } + static get invalidStaticGetter() { return; } + static set invalidStaticSetter(arg) { return; } +} diff --git a/tests/cases/compiler/dynamicNames.ts b/tests/cases/compiler/dynamicNames.ts index 3bf663892a7..e07febc7c7c 100644 --- a/tests/cases/compiler/dynamicNames.ts +++ b/tests/cases/compiler/dynamicNames.ts @@ -31,7 +31,7 @@ import * as M from "./module"; namespace N { export const c2 = "a"; export const c3 = 1; - export const s1 = s0; + export const s1: typeof s0 = s0; export interface T4 { [N.c2]: number; @@ -54,7 +54,7 @@ namespace N { export const c4 = "a"; export const c5 = 1; -export const s2 = s0; +export const s2: typeof s0 = s0; interface T8 { [c4]: number; diff --git a/tests/cases/conformance/types/uniqueSymbol/uniqueSymbols.ts b/tests/cases/conformance/types/uniqueSymbol/uniqueSymbols.ts new file mode 100644 index 00000000000..e21e6eb195d --- /dev/null +++ b/tests/cases/conformance/types/uniqueSymbol/uniqueSymbols.ts @@ -0,0 +1,117 @@ +// @target: esnext +// @lib: esnext +// @declaration: true + +// declarations with call initializer +const constCall = Symbol(); +let letCall = Symbol(); +var varCall = Symbol(); + +// ambient declaration with type +declare const constType: symbol(); + +// declaration with type and call initializer +const constTypeAndCall: symbol() = Symbol(); + +// declaration from initializer +const constInitToConstCall = constCall; +const constInitToLetCall = letCall; +const constInitToVarCall = varCall; +const constInitToConstDeclAmbient = constType; +let letInitToConstCall = constCall; +let letInitToLetCall = letCall; +let letInitToVarCall = varCall; +let letInitToConstDeclAmbient = constType; +var varInitToConstCall = constCall; +var varInitToLetCall = letCall; +var varInitToVarCall = varCall; +var varInitToConstDeclAmbient = constType; + +// declaration from initializer with type query +const constInitToConstCallWithTypeQuery: typeof constCall = constCall; +const constInitToConstDeclAmbientWithTypeQuery: typeof constType = constType; + +// function return inference +function funcReturnConstCall() { return constCall; } +function funcReturnLetCall() { return letCall; } +function funcReturnVarCall() { return varCall; } + +// function return value with type query +function funcReturnConstCallWithTypeQuery(): typeof constCall { return constCall; } + +// generator function yield inference +function* genFuncYieldConstCall() { yield constCall; } +function* genFuncYieldLetCall() { yield letCall; } +function* genFuncYieldVarCall() { yield varCall; } + +// generator function yield with return type query +function* genFuncYieldConstCallWithTypeQuery(): IterableIterator { yield constCall; } + +// async function return inference +async function asyncFuncReturnConstCall() { return constCall; } +async function asyncFuncReturnLetCall() { return letCall; } +async function asyncFuncReturnVarCall() { return varCall; } + +// async generator function yield inference +async function* asyncGenFuncYieldConstCall() { yield constCall; } +async function* asyncGenFuncYieldLetCall() { yield letCall; } +async function* asyncGenFuncYieldVarCall() { yield varCall; } + +// classes +class C { + static readonly readonlyStaticCall = Symbol(); + static readonly readonlyStaticType: symbol(); + static readonly readonlyStaticTypeAndCall: symbol() = Symbol(); + static readwriteStaticCall = Symbol(); + + readonly readonlyCall = Symbol(); + readwriteCall = Symbol(); +} +declare const c: C; + +const constInitToCReadonlyStaticCall = C.readonlyStaticCall; +const constInitToCReadonlyStaticType = C.readonlyStaticType; +const constInitToCReadonlyStaticTypeAndCall = C.readonlyStaticTypeAndCall; +const constInitToCReadwriteStaticCall = C.readwriteStaticCall; + +const constInitToCReadonlyStaticCallWithTypeQuery: typeof C.readonlyStaticCall = C.readonlyStaticCall; +const constInitToCReadonlyStaticTypeWithTypeQuery: typeof C.readonlyStaticType = C.readonlyStaticType; +const constInitToCReadonlyStaticTypeAndCallWithTypeQuery: typeof C.readonlyStaticTypeAndCall = C.readonlyStaticTypeAndCall; +const constInitToCReadwriteStaticCallWithTypeQuery: typeof C.readwriteStaticCall = C.readwriteStaticCall; + +const constInitToCReadonlyCall = c.readonlyCall; +const constInitToCReadwriteCall = c.readwriteCall; +const constInitToCReadonlyCallWithTypeQuery: typeof c.readonlyCall = c.readonlyCall; +const constInitToCReadwriteCallWithTypeQuery: typeof c.readwriteCall = c.readwriteCall; +const constInitToCReadonlyCallWithIndexedAccess: C["readonlyCall"] = c.readonlyCall; +const constInitToCReadwriteCallWithIndexedAccess: C["readwriteCall"] = c.readwriteCall; + +// interfaces +interface I { + readonly readonlyType: symbol(); +} +declare const i: I; + +const constInitToIReadonlyType = i.readonlyType; +const constInitToIReadonlyTypeWithTypeQuery: typeof i.readonlyType = i.readonlyType; +const constInitToIReadonlyTypeWithIndexedAccess: I["readonlyType"] = i.readonlyType; + +// type literals +type L = { + readonly readonlyType: symbol(); + nested: { + readonly readonlyNestedType: symbol(); + } +}; +declare const l: L; + +const constInitToLReadonlyType = l.readonlyType; +const constInitToLReadonlyNestedType = l.nested.readonlyNestedType; +const constInitToLReadonlyTypeWithTypeQuery: typeof l.readonlyType = l.readonlyType; +const constInitToLReadonlyNestedTypeWithTypeQuery: typeof l.nested.readonlyNestedType = l.nested.readonlyNestedType; +const constInitToLReadonlyTypeWithIndexedAccess: L["readonlyType"] = l.readonlyType; +const constInitToLReadonlyNestedTypeWithIndexedAccess: L["nested"]["readonlyNestedType"] = l.nested.readonlyNestedType; + +// type argument inference +const promiseForConstCall = Promise.resolve(constCall); +const arrayOfConstCall = [constCall]; \ No newline at end of file diff --git a/tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts b/tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts new file mode 100644 index 00000000000..c077d5852ad --- /dev/null +++ b/tests/cases/conformance/types/uniqueSymbol/uniqueSymbolsErrors.ts @@ -0,0 +1,86 @@ +// @target: esnext + +// declarations +declare const {}: symbol(); +declare let invalidLetType: symbol(); +declare var invalidVarType: symbol(); + +// function arguments and return types +declare function invalidArgType(arg: symbol()): void; +declare function invalidRestArgType(...arg: symbol()[]): void; +declare function invalidReturnType(): symbol(); +declare function invalidThisType(this: symbol()): void; +declare function invalidTypePredicate(n: any): n is symbol(); +declare function invalidTypeParameterConstraint(): void; +declare function invalidTypeParameterDefault(): void; + +// classes +class InvalidClass { + constructor(invalidConstructorArgType: symbol()) {} + + readonly invalidReadonlyPropertyType: symbol(); + invalidPropertyType: symbol(); + invalidArgType(arg: symbol()): void { return; } + invalidRestArgType(...args: symbol()[]): void { return; } + invalidReturnType(): symbol() { return; } + invalidThisType(this: symbol()): void { return; } + invalidTypePredicate(n: any): n is symbol() { return; } + invalidTypeParameterConstraint(): void { return; } + invalidTypeParameterDefault(): void { return; } + get invalidGetter(): symbol() { return; } + set invalidSetter(arg: symbol()) { return; } + + static invalidStaticPropertyType: symbol(); + static invalidStaticArgType(arg: symbol()): void { return; } + static invalidStaticRestArgType(...args: symbol()[]): void { return; } + static invalidStaticReturnType(): symbol() { return; } + static invalidStaticThisType(this: symbol()): void { return; } + static invalidStaticTypePredicate(n: any): n is symbol() { return; } + static invalidStaticTypeParameterConstraint(): void { return; } + static invalidStaticTypeParameterDefault(): void { return; } + static get invalidStaticGetter(): symbol() { return; } + static set invalidStaticSetter(arg: symbol()) { return; } +} + +// interfaces +interface InvalidInterface { + invalidPropertyType: symbol(); + invalidArgType(arg: symbol()): void; + invalidRestArgType(...args: symbol()[]): void; + invalidReturnType(): symbol(); + invalidThisType(this: symbol()); + invalidTypePredicate(n: any): n is symbol() + invalidTypeParameterConstraint(): void; + invalidTypeParameterDefault(): void; +} + +// type literals +type InvalidTypeLiteral = { + invalidPropertyType: symbol(); + invalidArgType(arg: symbol()): void; + invalidRestArgType(...args: symbol()[]): void; + invalidReturnType(): symbol(); + invalidThisType(this: symbol()); + invalidTypePredicate(n: any): n is symbol() + invalidTypeParameterConstraint(): void; + invalidTypeParameterDefault(): void; +}; + +// type alias +type InvalidAlias = symbol(); +type InvalidAliasTypeParameterConstraint = never; +type InvalidAliasTypeParameterDefault = never; + +// type references +declare const invalidTypeArgument: Promise; +declare const invalidArrayType: symbol()[]; +declare const invalidTupleType: [symbol()]; + +// mapped types +declare const invalidMappedType: { [P in string]: symbol() }; + +// unions/intersection +declare const invalidUnion: symbol() | symbol(); +declare const invalidIntersection: symbol() | symbol(); + +