add new tests for extends interface
This commit is contained in:
parent
38962eea82
commit
877977a450
10 changed files with 135 additions and 24 deletions
|
@ -955,7 +955,7 @@ namespace ts {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
const expression = (<ExpressionWithTypeArguments>parentClassExpression).expression;
|
const expression = (<ExpressionWithTypeArguments>parentClassExpression).expression;
|
||||||
if (resolveEntityName(expression, SymbolFlags.Interface, true)) {
|
if (resolveEntityName(expression, SymbolFlags.Interface, /*ignoreErrors*/ true)) {
|
||||||
error(errorLocation, Diagnostics.Cannot_extend_an_interface_0_Did_you_mean_implements, getTextOfNode(expression));
|
error(errorLocation, Diagnostics.Cannot_extend_an_interface_0_Did_you_mean_implements, getTextOfNode(expression));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@ tests/cases/compiler/classExtendsInterface.ts(6,21): error TS2689: Cannot extend
|
||||||
~~~~~~~~~~
|
~~~~~~~~~~
|
||||||
!!! error TS2689: Cannot extend an interface 'Comparable'. Did you mean 'implements'?
|
!!! error TS2689: Cannot extend an interface 'Comparable'. Did you mean 'implements'?
|
||||||
class B implements Comparable {}
|
class B implements Comparable {}
|
||||||
|
|
||||||
interface Comparable2<T> {}
|
interface Comparable2<T> {}
|
||||||
class A2<T> extends Comparable2<T> {}
|
class A2<T> extends Comparable2<T> {}
|
||||||
~~~~~~~~~~~
|
~~~~~~~~~~~
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
interface Comparable {}
|
interface Comparable {}
|
||||||
class A extends Comparable {}
|
class A extends Comparable {}
|
||||||
class B implements Comparable {}
|
class B implements Comparable {}
|
||||||
|
|
||||||
interface Comparable2<T> {}
|
interface Comparable2<T> {}
|
||||||
class A2<T> extends Comparable2<T> {}
|
class A2<T> extends Comparable2<T> {}
|
||||||
class B2<T> implements Comparable2<T> {}
|
class B2<T> implements Comparable2<T> {}
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
tests/cases/compiler/classExtendsInterfaceInExpression.ts(7,25): error TS2304: Cannot find name 'A'.
|
||||||
|
|
||||||
|
|
||||||
|
==== tests/cases/compiler/classExtendsInterfaceInExpression.ts (1 errors) ====
|
||||||
|
interface A {}
|
||||||
|
|
||||||
|
function factory(a: any): {new(): Object} {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
class C extends factory(A) {}
|
||||||
|
~
|
||||||
|
!!! error TS2304: Cannot find name 'A'.
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
//// [classExtendsInterfaceInExpression.ts]
|
||||||
|
interface A {}
|
||||||
|
|
||||||
|
function factory(a: any): {new(): Object} {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
class C extends factory(A) {}
|
||||||
|
|
||||||
|
|
||||||
|
//// [classExtendsInterfaceInExpression.js]
|
||||||
|
var __extends = (this && this.__extends) || function (d, b) {
|
||||||
|
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||||||
|
function __() { this.constructor = d; }
|
||||||
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||||||
|
};
|
||||||
|
function factory(a) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
var C = (function (_super) {
|
||||||
|
__extends(C, _super);
|
||||||
|
function C() {
|
||||||
|
_super.apply(this, arguments);
|
||||||
|
}
|
||||||
|
return C;
|
||||||
|
}(factory(A)));
|
|
@ -0,0 +1,27 @@
|
||||||
|
tests/cases/compiler/classExtendsInterfaceInModule.ts(5,18): error TS2689: Cannot extend an interface 'M.I1'. Did you mean 'implements'?
|
||||||
|
tests/cases/compiler/classExtendsInterfaceInModule.ts(6,21): error TS2689: Cannot extend an interface 'M.I2'. Did you mean 'implements'?
|
||||||
|
tests/cases/compiler/classExtendsInterfaceInModule.ts(14,17): error TS2689: Cannot extend an interface 'Mod.Nested.I'. Did you mean 'implements'?
|
||||||
|
|
||||||
|
|
||||||
|
==== tests/cases/compiler/classExtendsInterfaceInModule.ts (3 errors) ====
|
||||||
|
module M {
|
||||||
|
export interface I1 {}
|
||||||
|
export interface I2<T> {}
|
||||||
|
}
|
||||||
|
class C1 extends M.I1 {}
|
||||||
|
~
|
||||||
|
!!! error TS2689: Cannot extend an interface 'M.I1'. Did you mean 'implements'?
|
||||||
|
class C2<T> extends M.I2<T> {}
|
||||||
|
~
|
||||||
|
!!! error TS2689: Cannot extend an interface 'M.I2'. Did you mean 'implements'?
|
||||||
|
|
||||||
|
module Mod {
|
||||||
|
export namespace Nested {
|
||||||
|
export interface I {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class D extends Mod.Nested.I {}
|
||||||
|
~~~
|
||||||
|
!!! error TS2689: Cannot extend an interface 'Mod.Nested.I'. Did you mean 'implements'?
|
||||||
|
|
44
tests/baselines/reference/classExtendsInterfaceInModule.js
Normal file
44
tests/baselines/reference/classExtendsInterfaceInModule.js
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
//// [classExtendsInterfaceInModule.ts]
|
||||||
|
module M {
|
||||||
|
export interface I1 {}
|
||||||
|
export interface I2<T> {}
|
||||||
|
}
|
||||||
|
class C1 extends M.I1 {}
|
||||||
|
class C2<T> extends M.I2<T> {}
|
||||||
|
|
||||||
|
module Mod {
|
||||||
|
export namespace Nested {
|
||||||
|
export interface I {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class D extends Mod.Nested.I {}
|
||||||
|
|
||||||
|
|
||||||
|
//// [classExtendsInterfaceInModule.js]
|
||||||
|
var __extends = (this && this.__extends) || function (d, b) {
|
||||||
|
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||||||
|
function __() { this.constructor = d; }
|
||||||
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||||||
|
};
|
||||||
|
var C1 = (function (_super) {
|
||||||
|
__extends(C1, _super);
|
||||||
|
function C1() {
|
||||||
|
_super.apply(this, arguments);
|
||||||
|
}
|
||||||
|
return C1;
|
||||||
|
}(M.I1));
|
||||||
|
var C2 = (function (_super) {
|
||||||
|
__extends(C2, _super);
|
||||||
|
function C2() {
|
||||||
|
_super.apply(this, arguments);
|
||||||
|
}
|
||||||
|
return C2;
|
||||||
|
}(M.I2));
|
||||||
|
var D = (function (_super) {
|
||||||
|
__extends(D, _super);
|
||||||
|
function D() {
|
||||||
|
_super.apply(this, arguments);
|
||||||
|
}
|
||||||
|
return D;
|
||||||
|
}(Mod.Nested.I));
|
|
@ -5,24 +5,3 @@ class B implements Comparable {}
|
||||||
interface Comparable2<T> {}
|
interface Comparable2<T> {}
|
||||||
class A2<T> extends Comparable2<T> {}
|
class A2<T> extends Comparable2<T> {}
|
||||||
class B2<T> implements Comparable2<T> {}
|
class B2<T> implements Comparable2<T> {}
|
||||||
|
|
||||||
function Factory(a: any): {new()} {
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
|
|
||||||
class C extends Factory(Comparable) {}
|
|
||||||
|
|
||||||
module M {
|
|
||||||
export interface I1 {}
|
|
||||||
export interface I2<T> {}
|
|
||||||
}
|
|
||||||
class C1 extends M.I1 {}
|
|
||||||
class C2<T> extends M.I2<T> {}
|
|
||||||
|
|
||||||
namespace N {
|
|
||||||
export interface I1 {}
|
|
||||||
export interface I2<T> {}
|
|
||||||
}
|
|
||||||
|
|
||||||
class D1 extends N.I1 {}
|
|
||||||
class D2<T> extends N.I2<T> {}
|
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
interface A {}
|
||||||
|
|
||||||
|
function factory(a: any): {new(): Object} {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
class C extends factory(A) {}
|
14
tests/cases/compiler/classExtendsInterfaceInModule.ts
Normal file
14
tests/cases/compiler/classExtendsInterfaceInModule.ts
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
module M {
|
||||||
|
export interface I1 {}
|
||||||
|
export interface I2<T> {}
|
||||||
|
}
|
||||||
|
class C1 extends M.I1 {}
|
||||||
|
class C2<T> extends M.I2<T> {}
|
||||||
|
|
||||||
|
module Mod {
|
||||||
|
export namespace Nested {
|
||||||
|
export interface I {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class D extends Mod.Nested.I {}
|
Loading…
Reference in a new issue