Merge pull request #5257 from Microsoft/module-merge-with-constructors
Module merge with constructors
This commit is contained in:
Коммит
e98a76fb62
|
@ -3714,7 +3714,9 @@ namespace ts {
|
|||
function getSignatureFromDeclaration(declaration: SignatureDeclaration): Signature {
|
||||
let links = getNodeLinks(declaration);
|
||||
if (!links.resolvedSignature) {
|
||||
let classType = declaration.kind === SyntaxKind.Constructor ? getDeclaredTypeOfClassOrInterface((<ClassDeclaration>declaration.parent).symbol) : undefined;
|
||||
let classType = declaration.kind === SyntaxKind.Constructor ?
|
||||
getDeclaredTypeOfClassOrInterface(getMergedSymbol((<ClassDeclaration>declaration.parent).symbol))
|
||||
: undefined;
|
||||
let typeParameters = classType ? classType.localTypeParameters :
|
||||
declaration.typeParameters ? getTypeParametersFromDeclaration(declaration.typeParameters) : undefined;
|
||||
let parameters: Symbol[] = [];
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
//// [tests/cases/compiler/moduleMergeConstructor.ts] ////
|
||||
|
||||
//// [foo.d.ts]
|
||||
|
||||
declare module "foo" {
|
||||
export class Foo {
|
||||
constructor();
|
||||
method1(): any;
|
||||
}
|
||||
}
|
||||
|
||||
//// [foo-ext.d.ts]
|
||||
declare module "foo" {
|
||||
export interface Foo {
|
||||
method2(): any;
|
||||
}
|
||||
}
|
||||
|
||||
//// [index.ts]
|
||||
import * as foo from "foo";
|
||||
|
||||
class Test {
|
||||
bar: foo.Foo;
|
||||
constructor() {
|
||||
this.bar = new foo.Foo();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//// [index.js]
|
||||
define(["require", "exports", "foo"], function (require, exports, foo) {
|
||||
var Test = (function () {
|
||||
function Test() {
|
||||
this.bar = new foo.Foo();
|
||||
}
|
||||
return Test;
|
||||
})();
|
||||
});
|
|
@ -0,0 +1,45 @@
|
|||
=== tests/cases/compiler/foo.d.ts ===
|
||||
|
||||
declare module "foo" {
|
||||
export class Foo {
|
||||
>Foo : Symbol(Foo, Decl(foo.d.ts, 1, 22), Decl(foo-ext.d.ts, 0, 22))
|
||||
|
||||
constructor();
|
||||
method1(): any;
|
||||
>method1 : Symbol(method1, Decl(foo.d.ts, 3, 22))
|
||||
}
|
||||
}
|
||||
|
||||
=== tests/cases/compiler/foo-ext.d.ts ===
|
||||
declare module "foo" {
|
||||
export interface Foo {
|
||||
>Foo : Symbol(Foo, Decl(foo.d.ts, 1, 22), Decl(foo-ext.d.ts, 0, 22))
|
||||
|
||||
method2(): any;
|
||||
>method2 : Symbol(method2, Decl(foo-ext.d.ts, 1, 26))
|
||||
}
|
||||
}
|
||||
|
||||
=== tests/cases/compiler/index.ts ===
|
||||
import * as foo from "foo";
|
||||
>foo : Symbol(foo, Decl(index.ts, 0, 6))
|
||||
|
||||
class Test {
|
||||
>Test : Symbol(Test, Decl(index.ts, 0, 27))
|
||||
|
||||
bar: foo.Foo;
|
||||
>bar : Symbol(bar, Decl(index.ts, 2, 12))
|
||||
>foo : Symbol(foo, Decl(index.ts, 0, 6))
|
||||
>Foo : Symbol(foo.Foo, Decl(foo.d.ts, 1, 22), Decl(foo-ext.d.ts, 0, 22))
|
||||
|
||||
constructor() {
|
||||
this.bar = new foo.Foo();
|
||||
>this.bar : Symbol(bar, Decl(index.ts, 2, 12))
|
||||
>this : Symbol(Test, Decl(index.ts, 0, 27))
|
||||
>bar : Symbol(bar, Decl(index.ts, 2, 12))
|
||||
>foo.Foo : Symbol(foo.Foo, Decl(foo.d.ts, 1, 22), Decl(foo-ext.d.ts, 0, 22))
|
||||
>foo : Symbol(foo, Decl(index.ts, 0, 6))
|
||||
>Foo : Symbol(foo.Foo, Decl(foo.d.ts, 1, 22), Decl(foo-ext.d.ts, 0, 22))
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
=== tests/cases/compiler/foo.d.ts ===
|
||||
|
||||
declare module "foo" {
|
||||
export class Foo {
|
||||
>Foo : Foo
|
||||
|
||||
constructor();
|
||||
method1(): any;
|
||||
>method1 : () => any
|
||||
}
|
||||
}
|
||||
|
||||
=== tests/cases/compiler/foo-ext.d.ts ===
|
||||
declare module "foo" {
|
||||
export interface Foo {
|
||||
>Foo : Foo
|
||||
|
||||
method2(): any;
|
||||
>method2 : () => any
|
||||
}
|
||||
}
|
||||
|
||||
=== tests/cases/compiler/index.ts ===
|
||||
import * as foo from "foo";
|
||||
>foo : typeof foo
|
||||
|
||||
class Test {
|
||||
>Test : Test
|
||||
|
||||
bar: foo.Foo;
|
||||
>bar : foo.Foo
|
||||
>foo : any
|
||||
>Foo : foo.Foo
|
||||
|
||||
constructor() {
|
||||
this.bar = new foo.Foo();
|
||||
>this.bar = new foo.Foo() : foo.Foo
|
||||
>this.bar : foo.Foo
|
||||
>this : this
|
||||
>bar : foo.Foo
|
||||
>new foo.Foo() : foo.Foo
|
||||
>foo.Foo : typeof foo.Foo
|
||||
>foo : typeof foo
|
||||
>Foo : typeof foo.Foo
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
// @module: amd
|
||||
|
||||
// @filename: foo.d.ts
|
||||
declare module "foo" {
|
||||
export class Foo {
|
||||
constructor();
|
||||
method1(): any;
|
||||
}
|
||||
}
|
||||
|
||||
// @filename: foo-ext.d.ts
|
||||
declare module "foo" {
|
||||
export interface Foo {
|
||||
method2(): any;
|
||||
}
|
||||
}
|
||||
|
||||
// @filename: index.ts
|
||||
import * as foo from "foo";
|
||||
|
||||
class Test {
|
||||
bar: foo.Foo;
|
||||
constructor() {
|
||||
this.bar = new foo.Foo();
|
||||
}
|
||||
}
|
Загрузка…
Ссылка в новой задаче