@@ -50,6 +50,7 @@ export const enum NodeKind {
5050 // types
5151 NamedType ,
5252 FunctionType ,
53+ TupleType ,
5354 TypeName ,
5455 TypeParameter ,
5556 Parameter ,
@@ -161,6 +162,14 @@ export abstract class Node {
161162 return new FunctionTypeNode ( parameters , returnType , explicitThisType , isNullable , range ) ;
162163 }
163164
165+ static createTupleType (
166+ elements : TypeNode [ ] ,
167+ isNullable : bool ,
168+ range : Range
169+ ) : TupleTypeNode {
170+ return new TupleTypeNode ( elements , isNullable , range ) ;
171+ }
172+
164173 static createOmittedType (
165174 range : Range
166175 ) : NamedTypeNode {
@@ -862,6 +871,9 @@ export abstract class TypeNode extends Node {
862871 if ( functionTypeNode . returnType . hasGenericComponent ( typeParameterNodes ) ) return true ;
863872 let explicitThisType = functionTypeNode . explicitThisType ;
864873 if ( explicitThisType && explicitThisType . hasGenericComponent ( typeParameterNodes ) ) return true ;
874+ } else if ( this . kind == NodeKind . TupleType ) {
875+ let tupleTypeNode = < TupleTypeNode > changetype < TypeNode > ( this ) ;
876+ if ( tupleTypeNode . elements . some ( ( v ) => v . hasGenericComponent ( typeParameterNodes ) ) ) return true ;
865877 } else {
866878 assert ( false ) ;
867879 }
@@ -928,6 +940,20 @@ export class FunctionTypeNode extends TypeNode {
928940 }
929941}
930942
943+ /** Represents a tuple type. */
944+ export class TupleTypeNode extends TypeNode {
945+ constructor (
946+ /** Tuple elements. */
947+ public elements : TypeNode [ ] ,
948+ /** Whether nullable or not. */
949+ isNullable : bool ,
950+ /** Source range. */
951+ range : Range
952+ ) {
953+ super ( NodeKind . TupleType , isNullable , range ) ;
954+ }
955+ }
956+
931957/** Represents a type parameter. */
932958export class TypeParameterNode extends Node {
933959 constructor (
0 commit comments