mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-06-23 18:48:40 -05:00
Only used cached undefined contextual type for requests with no flags (#52224)
This commit is contained in:
@@ -28842,7 +28842,8 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
}
|
||||
const index = findContextualNode(node);
|
||||
if (index >= 0) {
|
||||
return contextualTypes[index];
|
||||
const cached = contextualTypes[index];
|
||||
if (cached || !contextFlags) return cached;
|
||||
}
|
||||
const { parent } = node;
|
||||
switch (parent.kind) {
|
||||
|
||||
38
tests/baselines/reference/cachedContextualTypes.js
Normal file
38
tests/baselines/reference/cachedContextualTypes.js
Normal file
@@ -0,0 +1,38 @@
|
||||
//// [cachedContextualTypes.ts]
|
||||
// Repro from #52198
|
||||
|
||||
declare function createInstance<Ctor extends new (...args: any[]) => any, R extends InstanceType<Ctor>>(ctor: Ctor, ...args: ConstructorParameters<Ctor>): R;
|
||||
|
||||
export interface IMenuWorkbenchToolBarOptions {
|
||||
toolbarOptions: {
|
||||
foo(bar: string): string
|
||||
};
|
||||
}
|
||||
|
||||
class MenuWorkbenchToolBar {
|
||||
constructor(
|
||||
options: IMenuWorkbenchToolBarOptions | undefined,
|
||||
) { }
|
||||
}
|
||||
|
||||
createInstance(MenuWorkbenchToolBar, {
|
||||
toolbarOptions: {
|
||||
foo(bar) { return bar; }
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
//// [cachedContextualTypes.js]
|
||||
"use strict";
|
||||
// Repro from #52198
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
var MenuWorkbenchToolBar = /** @class */ (function () {
|
||||
function MenuWorkbenchToolBar(options) {
|
||||
}
|
||||
return MenuWorkbenchToolBar;
|
||||
}());
|
||||
createInstance(MenuWorkbenchToolBar, {
|
||||
toolbarOptions: {
|
||||
foo: function (bar) { return bar; }
|
||||
}
|
||||
});
|
||||
55
tests/baselines/reference/cachedContextualTypes.symbols
Normal file
55
tests/baselines/reference/cachedContextualTypes.symbols
Normal file
@@ -0,0 +1,55 @@
|
||||
=== tests/cases/compiler/cachedContextualTypes.ts ===
|
||||
// Repro from #52198
|
||||
|
||||
declare function createInstance<Ctor extends new (...args: any[]) => any, R extends InstanceType<Ctor>>(ctor: Ctor, ...args: ConstructorParameters<Ctor>): R;
|
||||
>createInstance : Symbol(createInstance, Decl(cachedContextualTypes.ts, 0, 0))
|
||||
>Ctor : Symbol(Ctor, Decl(cachedContextualTypes.ts, 2, 32))
|
||||
>args : Symbol(args, Decl(cachedContextualTypes.ts, 2, 50))
|
||||
>R : Symbol(R, Decl(cachedContextualTypes.ts, 2, 73))
|
||||
>InstanceType : Symbol(InstanceType, Decl(lib.es5.d.ts, --, --))
|
||||
>Ctor : Symbol(Ctor, Decl(cachedContextualTypes.ts, 2, 32))
|
||||
>ctor : Symbol(ctor, Decl(cachedContextualTypes.ts, 2, 104))
|
||||
>Ctor : Symbol(Ctor, Decl(cachedContextualTypes.ts, 2, 32))
|
||||
>args : Symbol(args, Decl(cachedContextualTypes.ts, 2, 115))
|
||||
>ConstructorParameters : Symbol(ConstructorParameters, Decl(lib.es5.d.ts, --, --))
|
||||
>Ctor : Symbol(Ctor, Decl(cachedContextualTypes.ts, 2, 32))
|
||||
>R : Symbol(R, Decl(cachedContextualTypes.ts, 2, 73))
|
||||
|
||||
export interface IMenuWorkbenchToolBarOptions {
|
||||
>IMenuWorkbenchToolBarOptions : Symbol(IMenuWorkbenchToolBarOptions, Decl(cachedContextualTypes.ts, 2, 157))
|
||||
|
||||
toolbarOptions: {
|
||||
>toolbarOptions : Symbol(IMenuWorkbenchToolBarOptions.toolbarOptions, Decl(cachedContextualTypes.ts, 4, 47))
|
||||
|
||||
foo(bar: string): string
|
||||
>foo : Symbol(foo, Decl(cachedContextualTypes.ts, 5, 21))
|
||||
>bar : Symbol(bar, Decl(cachedContextualTypes.ts, 6, 12))
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
class MenuWorkbenchToolBar {
|
||||
>MenuWorkbenchToolBar : Symbol(MenuWorkbenchToolBar, Decl(cachedContextualTypes.ts, 8, 1))
|
||||
|
||||
constructor(
|
||||
options: IMenuWorkbenchToolBarOptions | undefined,
|
||||
>options : Symbol(options, Decl(cachedContextualTypes.ts, 11, 16))
|
||||
>IMenuWorkbenchToolBarOptions : Symbol(IMenuWorkbenchToolBarOptions, Decl(cachedContextualTypes.ts, 2, 157))
|
||||
|
||||
) { }
|
||||
}
|
||||
|
||||
createInstance(MenuWorkbenchToolBar, {
|
||||
>createInstance : Symbol(createInstance, Decl(cachedContextualTypes.ts, 0, 0))
|
||||
>MenuWorkbenchToolBar : Symbol(MenuWorkbenchToolBar, Decl(cachedContextualTypes.ts, 8, 1))
|
||||
|
||||
toolbarOptions: {
|
||||
>toolbarOptions : Symbol(toolbarOptions, Decl(cachedContextualTypes.ts, 16, 38))
|
||||
|
||||
foo(bar) { return bar; }
|
||||
>foo : Symbol(foo, Decl(cachedContextualTypes.ts, 17, 21))
|
||||
>bar : Symbol(bar, Decl(cachedContextualTypes.ts, 18, 12))
|
||||
>bar : Symbol(bar, Decl(cachedContextualTypes.ts, 18, 12))
|
||||
}
|
||||
});
|
||||
|
||||
47
tests/baselines/reference/cachedContextualTypes.types
Normal file
47
tests/baselines/reference/cachedContextualTypes.types
Normal file
@@ -0,0 +1,47 @@
|
||||
=== tests/cases/compiler/cachedContextualTypes.ts ===
|
||||
// Repro from #52198
|
||||
|
||||
declare function createInstance<Ctor extends new (...args: any[]) => any, R extends InstanceType<Ctor>>(ctor: Ctor, ...args: ConstructorParameters<Ctor>): R;
|
||||
>createInstance : <Ctor extends new (...args: any[]) => any, R extends InstanceType<Ctor>>(ctor: Ctor, ...args: ConstructorParameters<Ctor>) => R
|
||||
>args : any[]
|
||||
>ctor : Ctor
|
||||
>args : ConstructorParameters<Ctor>
|
||||
|
||||
export interface IMenuWorkbenchToolBarOptions {
|
||||
toolbarOptions: {
|
||||
>toolbarOptions : { foo(bar: string): string; }
|
||||
|
||||
foo(bar: string): string
|
||||
>foo : (bar: string) => string
|
||||
>bar : string
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
class MenuWorkbenchToolBar {
|
||||
>MenuWorkbenchToolBar : MenuWorkbenchToolBar
|
||||
|
||||
constructor(
|
||||
options: IMenuWorkbenchToolBarOptions | undefined,
|
||||
>options : IMenuWorkbenchToolBarOptions | undefined
|
||||
|
||||
) { }
|
||||
}
|
||||
|
||||
createInstance(MenuWorkbenchToolBar, {
|
||||
>createInstance(MenuWorkbenchToolBar, { toolbarOptions: { foo(bar) { return bar; } }}) : MenuWorkbenchToolBar
|
||||
>createInstance : <Ctor extends new (...args: any[]) => any, R extends InstanceType<Ctor>>(ctor: Ctor, ...args: ConstructorParameters<Ctor>) => R
|
||||
>MenuWorkbenchToolBar : typeof MenuWorkbenchToolBar
|
||||
>{ toolbarOptions: { foo(bar) { return bar; } }} : { toolbarOptions: { foo(bar: string): string; }; }
|
||||
|
||||
toolbarOptions: {
|
||||
>toolbarOptions : { foo(bar: string): string; }
|
||||
>{ foo(bar) { return bar; } } : { foo(bar: string): string; }
|
||||
|
||||
foo(bar) { return bar; }
|
||||
>foo : (bar: string) => string
|
||||
>bar : string
|
||||
>bar : string
|
||||
}
|
||||
});
|
||||
|
||||
23
tests/cases/compiler/cachedContextualTypes.ts
Normal file
23
tests/cases/compiler/cachedContextualTypes.ts
Normal file
@@ -0,0 +1,23 @@
|
||||
// @strict: true
|
||||
|
||||
// Repro from #52198
|
||||
|
||||
declare function createInstance<Ctor extends new (...args: any[]) => any, R extends InstanceType<Ctor>>(ctor: Ctor, ...args: ConstructorParameters<Ctor>): R;
|
||||
|
||||
export interface IMenuWorkbenchToolBarOptions {
|
||||
toolbarOptions: {
|
||||
foo(bar: string): string
|
||||
};
|
||||
}
|
||||
|
||||
class MenuWorkbenchToolBar {
|
||||
constructor(
|
||||
options: IMenuWorkbenchToolBarOptions | undefined,
|
||||
) { }
|
||||
}
|
||||
|
||||
createInstance(MenuWorkbenchToolBar, {
|
||||
toolbarOptions: {
|
||||
foo(bar) { return bar; }
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user