TypeScript 1.5 Supplemental Grammar
1 TypeScript Supplemental Grammar
TypeParameters:<TypeParameterList>
TypeParameterList:TypeParameter
TypeParameterList,TypeParameter
TypeParameter:IdentifierConstraintopt
Constraint:extendsType
TypeArguments:<TypeArgumentList>
TypeArgumentList:TypeArgument
TypeArgumentList,TypeArgument
TypeArgument:Type
Type:PrimaryOrUnionType
FunctionType
ConstructorType
PrimaryOrUnionType:PrimaryType
UnionType
PrimaryType:ParenthesizedType
PredefinedType
TypeReference
ObjectType
ArrayType
TupleType
TypeQuery
ParenthesizedType:(Type)
PredefinedType:any
number
boolean
string
void
TypeReference:TypeName[no LineTerminator here]TypeArgumentsopt
TypeName:Identifier
ModuleName.Identifier
ModuleName:Identifier
ModuleName.Identifier
ObjectType:{TypeBodyopt}
TypeBody:TypeMemberList;opt
TypeMemberList:TypeMember
TypeMemberList;TypeMember
TypeMember:PropertySignature
CallSignature
ConstructSignature
IndexSignature
MethodSignature
ArrayType:PrimaryType[no LineTerminator here][]
TupleType:[TupleElementTypes]
TupleElementTypes:TupleElementType
TupleElementTypes,TupleElementType
TupleElementType:Type
UnionType:PrimaryOrUnionType|PrimaryType
FunctionType:TypeParametersopt(ParameterListopt)=>Type
ConstructorType:newTypeParametersopt(ParameterListopt)=>Type
TypeQuery:typeofTypeQueryExpression
TypeQueryExpression:Identifier
TypeQueryExpression.IdentifierName
PropertySignature:PropertyName?optTypeAnnotationopt
PropertyName:IdentifierName
StringLiteral
NumericLiteral
CallSignature:TypeParametersopt(ParameterListopt)TypeAnnotationopt
ParameterList:RequiredParameterList
OptionalParameterList
RestParameter
RequiredParameterList,OptionalParameterList
RequiredParameterList,RestParameter
OptionalParameterList,RestParameter
RequiredParameterList,OptionalParameterList,RestParameter
RequiredParameterList:RequiredParameter
RequiredParameterList,RequiredParameter
RequiredParameter:AccessibilityModifieroptIdentifierTypeAnnotationopt
Identifier:StringLiteral
AccessibilityModifier:public
private
protected
OptionalParameterList:OptionalParameter
OptionalParameterList,OptionalParameter
OptionalParameter:AccessibilityModifieroptIdentifier?TypeAnnotationopt
AccessibilityModifieroptIdentifierTypeAnnotationoptInitializer
Identifier?:StringLiteral
RestParameter:...IdentifierTypeAnnotationopt
ConstructSignature:newTypeParametersopt(ParameterListopt)TypeAnnotationopt
IndexSignature:[Identifier:string]TypeAnnotation
[Identifier:number]TypeAnnotation
MethodSignature:PropertyName?optCallSignature
TypeAliasDeclaration:typeIdentifier=Type;
PropertyAssignment:PropertyName:AssignmentExpression
PropertyNameCallSignature{FunctionBody}
GetAccessor
SetAccessor
GetAccessor:getPropertyName()TypeAnnotationopt{FunctionBody}
SetAccessor:setPropertyName(IdentifierTypeAnnotationopt){FunctionBody}
ElementList:ElisionoptAssignmentExpression
ElisionoptSpreadElement
ElementList,ElisionoptAssignmentExpression
ElementList,ElisionoptSpreadElement
SpreadElement:...AssignmentExpression
CallExpression:super(ArgumentListopt)
super.IdentifierName
FunctionExpression:functionIdentifieroptCallSignature{FunctionBody}
AssignmentExpression:ArrowFunctionExpression
ArrowFunctionExpression:ArrowFormalParameters=>Block
ArrowFormalParameters=>AssignmentExpression
ArrowFormalParameters:CallSignature
Identifier
Arguments:TypeArgumentsopt(ArgumentListopt)
UnaryExpression:<Type>UnaryExpression
VariableDeclaration:SimpleVariableDeclaration
DestructuringVariableDeclaration
SimpleVariableDeclaration:IdentifierTypeAnnotationoptInitializeropt
TypeAnnotation::Type
DestructuringVariableDeclaration:BindingPatternTypeAnnotationoptInitializer
BindingPattern:ObjectBindingPattern
ArrayBindingPattern
ObjectBindingPattern:{}
{BindingPropertyList,opt}
BindingPropertyList:BindingProperty
BindingPropertyList,BindingProperty
BindingProperty:IdentifierInitializeropt
PropertyName:IdentifierInitializeropt
PropertyName:BindingPatternInitializeropt
ArrayBindingPattern:[ElisionoptBindingRestElementopt]
[BindingElementList]
[BindingElementList,ElisionoptBindingRestElementopt]
BindingElementList:ElisionoptBindingElement
BindingElementList,ElisionoptBindingElement
BindingElement:IdentifierInitializeropt
BindingPatternInitializeropt
BindingRestElement:...Identifier
FunctionDeclaration:FunctionOverloadsoptFunctionImplementation
FunctionOverloads:FunctionOverload
FunctionOverloadsFunctionOverload
FunctionOverload:functionIdentifierCallSignature;
FunctionImplementation:functionIdentifierCallSignature{FunctionBody}
InterfaceDeclaration:interfaceIdentifierTypeParametersoptInterfaceExtendsClauseoptObjectType
InterfaceExtendsClause:extendsClassOrInterfaceTypeList
ClassOrInterfaceTypeList:ClassOrInterfaceType
ClassOrInterfaceTypeList,ClassOrInterfaceType
ClassOrInterfaceType:TypeReference
ClassDeclaration:classIdentifierTypeParametersoptClassHeritage{ClassBody}
ClassHeritage:ClassExtendsClauseoptImplementsClauseopt
ClassExtendsClause:extendsClassType
ClassType:TypeReference
ImplementsClause:implementsClassOrInterfaceTypeList
ClassBody:ClassElementsopt
ClassElements:ClassElement
ClassElementsClassElement
ClassElement:ConstructorDeclaration
PropertyMemberDeclaration
IndexMemberDeclaration
ConstructorDeclaration:ConstructorOverloadsoptConstructorImplementation
ConstructorOverloads:ConstructorOverload
ConstructorOverloadsConstructorOverload
ConstructorOverload:AccessibilityModifieroptconstructor(ParameterListopt);
ConstructorImplementation:AccessibilityModifieroptconstructor(ParameterListopt){FunctionBody}
PropertyMemberDeclaration:MemberVariableDeclaration
MemberFunctionDeclaration
MemberAccessorDeclaration
MemberVariableDeclaration:AccessibilityModifieroptstaticoptPropertyNameTypeAnnotationoptInitializeropt;
MemberFunctionDeclaration:MemberFunctionOverloadsoptMemberFunctionImplementation
MemberFunctionOverloads:MemberFunctionOverload
MemberFunctionOverloadsMemberFunctionOverload
MemberFunctionOverload:AccessibilityModifieroptstaticoptPropertyNameCallSignature;
MemberFunctionImplementation:AccessibilityModifieroptstaticoptPropertyNameCallSignature{FunctionBody}
MemberAccessorDeclaration:AccessibilityModifieroptstaticoptGetAccessor
AccessibilityModifieroptstaticoptSetAccessor
IndexMemberDeclaration:IndexSignature;
EnumDeclaration:constoptenumIdentifier{EnumBodyopt}
EnumBody:EnumMemberList,opt
EnumMemberList:EnumMember
EnumMemberList,EnumMember
EnumMember:PropertyName
PropertyName=EnumValue
EnumValue:AssignmentExpression
ModuleDeclaration:moduleIdentifierPath{ModuleBody}
IdentifierPath:Identifier
IdentifierPath.Identifier
ModuleBody:ModuleElementsopt
ModuleElements:ModuleElement
ModuleElementsModuleElement
ModuleElement:Statement
exportoptVariableDeclaration
exportoptFunctionDeclaration
exportoptClassDeclaration
exportoptInterfaceDeclaration
exportoptTypeAliasDeclaration
exportoptEnumDeclaration
exportoptModuleDeclaration
exportoptImportDeclaration
exportoptAmbientDeclaration
ImportDeclaration:importIdentifier=EntityName;
EntityName:ModuleName
ModuleName.Identifier
SourceFile:ImplementationSourceFile
DeclarationSourceFile
ImplementationSourceFile:ImplementationElementsopt
ImplementationElements:ImplementationElement
ImplementationElementsImplementationElement
ImplementationElement:ModuleElement
ExportAssignment
AmbientExternalModuleDeclaration
exportoptExternalImportDeclaration
DeclarationSourceFile:DeclarationElementsopt
DeclarationElements:DeclarationElement
DeclarationElementsDeclarationElement
DeclarationElement:ExportAssignment
AmbientExternalModuleDeclaration
exportoptInterfaceDeclaration
exportoptTypeAliasDeclaration
exportoptImportDeclaration
exportoptAmbientDeclaration
exportoptExternalImportDeclaration
ExternalImportDeclaration:importIdentifier=ExternalModuleReference;
ExternalModuleReference:require(StringLiteral)
ExportAssignment:export=Identifier;
AmbientDeclaration:declareAmbientVariableDeclaration
declareAmbientFunctionDeclaration
declareAmbientClassDeclaration
declareAmbientEnumDeclaration
declareAmbientModuleDeclaration
AmbientVariableDeclaration:varIdentifierTypeAnnotationopt;
AmbientFunctionDeclaration:functionIdentifierCallSignature;
AmbientClassDeclaration:classIdentifierTypeParametersoptClassHeritage{AmbientClassBody}
AmbientClassBody:AmbientClassBodyElementsopt
AmbientClassBodyElements:AmbientClassBodyElement
AmbientClassBodyElementsAmbientClassBodyElement
AmbientClassBodyElement:AmbientConstructorDeclaration
AmbientPropertyMemberDeclaration
IndexSignature
AmbientConstructorDeclaration:constructor(ParameterListopt);
AmbientPropertyMemberDeclaration:AccessibilityModifieroptstaticoptPropertyNameTypeAnnotationopt;
AccessibilityModifieroptstaticoptPropertyNameCallSignature;
AmbientEnumDeclaration:EnumDeclaration
AmbientModuleDeclaration:moduleIdentifierPath{AmbientModuleBody}
AmbientModuleBody:AmbientModuleElementsopt
AmbientModuleElements:AmbientModuleElement
AmbientModuleElementsAmbientModuleElement
AmbientModuleElement:exportoptAmbientVariableDeclaration
exportoptAmbientFunctionDeclaration
exportoptAmbientClassDeclaration
exportoptInterfaceDeclaration
exportoptAmbientEnumDeclaration
exportoptAmbientModuleDeclaration
exportoptImportDeclaration
AmbientExternalModuleDeclaration:declaremoduleStringLiteral{AmbientExternalModuleBody}
AmbientExternalModuleBody:AmbientExternalModuleElementsopt
AmbientExternalModuleElements:AmbientExternalModuleElement
AmbientExternalModuleElementsAmbientExternalModuleElement
AmbientExternalModuleElement:AmbientModuleElement
ExportAssignment
exportoptExternalImportDeclaration