Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
643351c
Support deferred resolution of type arguments in type references
ahejlsberg Aug 23, 2019
b24fcd0
Recursive tuple types + fix instantiation of recursive type references
ahejlsberg Aug 24, 2019
52a1a14
Instantiate deferred type references like anonymous types
ahejlsberg Aug 26, 2019
dd47fff
Properly handle recursive array and tuple types in printback
ahejlsberg Aug 26, 2019
7753f7b
Merge branch 'master' into recursiveTypeReferences
ahejlsberg Aug 26, 2019
5310fd0
Minor fixes
ahejlsberg Aug 27, 2019
5c21f43
Accept new baselines
ahejlsberg Aug 27, 2019
bf0debb
Handle missing global array type
ahejlsberg Aug 27, 2019
b18c70f
Fix fourslash test
ahejlsberg Aug 27, 2019
c2d0aa8
Only defer aliased array and tuple types
ahejlsberg Aug 27, 2019
8f3a917
Accept new baselines
ahejlsberg Aug 27, 2019
842c588
Exclude method symbols when relating tuple types
ahejlsberg Aug 28, 2019
fd8f990
Fix instantiation of alias type arguments for deferred type references
ahejlsberg Aug 29, 2019
6270ccc
Accept new baselines
ahejlsberg Aug 29, 2019
2f0ac25
Defer resolution of type arguments in aliased type references
ahejlsberg Aug 30, 2019
81bfa6f
Accept new baselines
ahejlsberg Aug 30, 2019
a92d599
Tweak isAliasedType
ahejlsberg Aug 30, 2019
b9cb3a6
Accept new baselines
ahejlsberg Aug 31, 2019
db7c03d
Merge branch 'master' into recursiveTypeReferences
ahejlsberg Sep 21, 2019
8604d4e
Include type operators in aliased type checks
ahejlsberg Sep 21, 2019
bf08d3b
Fix linting issues
ahejlsberg Sep 23, 2019
e3d23cc
Add tests
ahejlsberg Sep 24, 2019
3aa3326
Accept new baselines
ahejlsberg Sep 24, 2019
5962a5c
Merge branch 'master' into recursiveTypeReferences
ahejlsberg Sep 24, 2019
f0bf72f
Fix linting issue
ahejlsberg Sep 24, 2019
b2f4af4
Fix that works with both LKG and built compilers
ahejlsberg Sep 24, 2019
27752c6
Merge branch 'master' into recursiveTypeReferences
ahejlsberg Sep 24, 2019
3061a41
Add getTypeArguments method to TypeChecker interface
ahejlsberg Sep 24, 2019
7fd93fd
Accept API baseline changes
ahejlsberg Sep 24, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Minor fixes
  • Loading branch information
ahejlsberg committed Aug 27, 2019
commit 5310fd0156f6714506c1b6b7892d21177e30a898
12 changes: 5 additions & 7 deletions src/compiler/checker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3876,8 +3876,9 @@ namespace ts {
function visitAndTransformType<T>(type: Type, transform: (type: Type) => T) {
const typeId = "" + type.id;
const isConstructorObject = getObjectFlags(type) & ObjectFlags.Anonymous && type.symbol && type.symbol.flags & SymbolFlags.Class;
const id = getObjectFlags(type) & ObjectFlags.Reference ? "N" + getNodeId((<DeferredTypeReference>type).node) :
(isConstructorObject ? "+" : "") + getSymbolId(type.symbol);
const id = getObjectFlags(type) & ObjectFlags.Reference && (<TypeReference>type).node ? "N" + getNodeId((<TypeReference>type).node!) :
type.symbol ? (isConstructorObject ? "+" : "") + getSymbolId(type.symbol) :
undefined;
// Since instantiations of the same anonymous type have the same symbol, tracking symbols instead
// of types allows us to catch circular references to instantiations of the same anonymous type
if (!context.visitedTypes) {
Expand Down Expand Up @@ -29347,12 +29348,9 @@ namespace ts {

if (!(staticBaseType.symbol && staticBaseType.symbol.flags & SymbolFlags.Class) && !(baseConstructorType.flags & TypeFlags.TypeVariable)) {
// When the static base type is a "class-like" constructor function (but not actually a class), we verify
// that all instantiated base constructor signatures return the same type. We can simply compare the type
// references (as opposed to checking the structure of the types) because elsewhere we have already checked
// that the base type is a class or interface type (and not, for example, an anonymous object type).
// (Javascript constructor functions have this property trivially true since their return type is ignored.)
// that all instantiated base constructor signatures return the same type.
const constructors = getInstantiatedConstructorsForTypeArguments(staticBaseType, baseTypeNode.typeArguments, baseTypeNode);
if (forEach(constructors, sig => !isJSConstructor(sig.declaration) && getReturnTypeOfSignature(sig) !== baseType)) {
if (forEach(constructors, sig => !isJSConstructor(sig.declaration) && !isTypeIdenticalTo(getReturnTypeOfSignature(sig), baseType))) {
error(baseTypeNode.expression, Diagnostics.Base_constructors_must_all_have_the_same_return_type);
}
}
Expand Down
4 changes: 4 additions & 0 deletions src/compiler/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4203,14 +4203,18 @@ namespace ts {
export interface TypeReference extends ObjectType {
target: GenericType; // Type reference target
node?: ArrayTypeNode | TupleTypeNode;
/* @internal */
mapper?: TypeMapper;
/* @internal */
resolvedTypeArguments?: ReadonlyArray<Type>; // Resolved ype reference type arguments
/* @internal */
literalType?: TypeReference; // Clone of type with ObjectFlags.ArrayLiteral set
}

export interface DeferredTypeReference extends TypeReference {
/* @internal */
node: ArrayTypeNode | TupleTypeNode;
/* @internal */
mapper?: TypeMapper;
}

Expand Down