Merge pull request #5257 from Microsoft/module-merge-with-constructors

Module merge with constructors
This commit is contained in:
Mohamed Hegazy 2015-10-16 16:55:57 -07:00
Родитель bb369f1423 c66bbd8cea
Коммит e98a76fb62
5 изменённых файлов: 159 добавлений и 1 удалений

Просмотреть файл

@ -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();
}
}