mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-30 01:04:49 -05:00
Update type-only import semantics to allow type queries (#36092)
* Change type-only semantics to allow type queries * Don’t error using type-only import in ambient context * Fix default import * Fix namespace import * Update more baselines * Prevent circular resolution * Track const enum expression usage * Update baselines * Perf tuning 1 * Test commit for perf impact * Weave type-only alias declaration finding into alias resolution * Fix namespace import of type-only exported symbols * type-only exports do not contribute to the module object type * Update APIs * Fix enum casing, remove type-only conversion suggestion * Short circuit type-only checks in resolveEntityName faster * Fix casing in API * Remove unused parameter * Fix error on qualified names in type queries * Allow type-only imports in computed property names * Fix computed property names of types and abstract members * Remove unused util * Commit missing baselines * Rename “check” functions so as not to overload the word “check”
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
// @Filename: /a.ts
|
||||
export class A { a!: string }
|
||||
|
||||
// @Filename: /b.ts
|
||||
import type { A } from './a';
|
||||
declare class B extends A {}
|
||||
declare namespace ns {
|
||||
class C extends A {}
|
||||
}
|
||||
19
tests/cases/conformance/externalModules/typeOnly/chained2.ts
Normal file
19
tests/cases/conformance/externalModules/typeOnly/chained2.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
// @Filename: /a.ts
|
||||
class A { a!: string }
|
||||
export type { A as default };
|
||||
|
||||
// @Filename: /b.ts
|
||||
import A from './a';
|
||||
import type { default as B } from './a';
|
||||
export { A, B };
|
||||
|
||||
// @Filename: /c.ts
|
||||
import * as types from './b';
|
||||
export { types as default };
|
||||
|
||||
// @Filename: /d.ts
|
||||
import types from './c';
|
||||
new types.A();
|
||||
new types.B();
|
||||
const a: types.A = {};
|
||||
const b: types.B = {};
|
||||
@@ -0,0 +1,43 @@
|
||||
// @target: esnext
|
||||
|
||||
// @Filename: framework-hooks.ts
|
||||
export const onInit = Symbol("onInit");
|
||||
|
||||
// @Filename: component.ts
|
||||
import type { onInit } from "./framework-hooks";
|
||||
|
||||
interface Component {
|
||||
[onInit]?(): void;
|
||||
}
|
||||
|
||||
type T = {
|
||||
[onInit]: any;
|
||||
}
|
||||
|
||||
const o = {
|
||||
[onInit]: 0 // Error
|
||||
};
|
||||
|
||||
class C {
|
||||
[onInit]: any; // Error (because class fields)
|
||||
}
|
||||
|
||||
class D {
|
||||
[onInit] = 0; // Error
|
||||
}
|
||||
|
||||
class E {
|
||||
[onInit]() {} // Error
|
||||
}
|
||||
|
||||
abstract class F {
|
||||
abstract [onInit](): void;
|
||||
}
|
||||
|
||||
class G {
|
||||
declare [onInit]: any;
|
||||
}
|
||||
|
||||
declare class H {
|
||||
[onInit]: any;
|
||||
}
|
||||
@@ -5,6 +5,7 @@
|
||||
export default class {}
|
||||
export class A {}
|
||||
export type B = {};
|
||||
export const enum C { One, Two }
|
||||
|
||||
// @Filename: /b.ts
|
||||
import { A, B } from './a'; // Error
|
||||
@@ -26,3 +27,17 @@ console.log(a, b);
|
||||
|
||||
// @Filename: /e.ts
|
||||
import { A, B } from './a'; // noUnusedLocals error only
|
||||
|
||||
// @Filename: /f.ts
|
||||
import { C } from './a';
|
||||
import type { C as D } from './a';
|
||||
C.One;
|
||||
let c: D = C.Two;
|
||||
let d: D.Two = C.Two;
|
||||
console.log(c, d);
|
||||
|
||||
// @Filename: /g.ts
|
||||
import { C } from './a';
|
||||
let c: C;
|
||||
let d: C.Two;
|
||||
console.log(c, d);
|
||||
@@ -0,0 +1,9 @@
|
||||
// @Filename: /a.ts
|
||||
class A {}
|
||||
export type { A };
|
||||
export class B {};
|
||||
|
||||
// @Filename: /b.ts
|
||||
import * as types from './a';
|
||||
let A: typeof types.A;
|
||||
let B: typeof types.B;
|
||||
@@ -0,0 +1,8 @@
|
||||
// @Filename: /a.ts
|
||||
class A { a!: string }
|
||||
export type { A };
|
||||
|
||||
// @Filename: /b.ts
|
||||
import * as types from './a';
|
||||
types.A;
|
||||
const { A } = types;
|
||||
@@ -0,0 +1,6 @@
|
||||
// @Filename: /a.ts
|
||||
export class A { }
|
||||
|
||||
// @Filename: /b.ts
|
||||
import type { A } from './a';
|
||||
let AConstructor: typeof A;
|
||||
Reference in New Issue
Block a user