220 lines
No EOL
6.6 KiB
Text
220 lines
No EOL
6.6 KiB
Text
tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(12,10): error TS2339: Property 'bar' does not exist on type 'A'.
|
|
tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(33,5): error TS2322: Type 'string' is not assignable to type 'number'.
|
|
tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(34,10): error TS2339: Property 'bar' does not exist on type 'B<number>'.
|
|
tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(63,10): error TS2339: Property 'bar2' does not exist on type 'C1'.
|
|
tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(82,10): error TS2339: Property 'bar' does not exist on type 'D'.
|
|
tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(109,10): error TS2339: Property 'bar2' does not exist on type 'E1'.
|
|
tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(131,11): error TS2339: Property 'foo' does not exist on type 'string | F'.
|
|
tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(132,11): error TS2339: Property 'bar' does not exist on type 'string | F'.
|
|
tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(157,11): error TS2339: Property 'foo2' does not exist on type 'G1'.
|
|
tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(179,11): error TS2339: Property 'bar' does not exist on type 'H'.
|
|
|
|
|
|
==== tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts (10 errors) ====
|
|
interface AConstructor {
|
|
new (): A;
|
|
}
|
|
interface A {
|
|
foo: string;
|
|
}
|
|
declare var A: AConstructor;
|
|
|
|
var obj1: A | string;
|
|
if (obj1 instanceof A) { // narrowed to A.
|
|
obj1.foo;
|
|
obj1.bar;
|
|
~~~
|
|
!!! error TS2339: Property 'bar' does not exist on type 'A'.
|
|
}
|
|
|
|
var obj2: any;
|
|
if (obj2 instanceof A) { // can't type narrowing from any.
|
|
obj2.foo;
|
|
obj2.bar;
|
|
}
|
|
|
|
// a construct signature with generics
|
|
interface BConstructor {
|
|
new <T>(): B<T>;
|
|
}
|
|
interface B<T> {
|
|
foo: T;
|
|
}
|
|
declare var B: BConstructor;
|
|
|
|
var obj3: B<number> | string;
|
|
if (obj3 instanceof B) { // narrowed to B<number>.
|
|
obj3.foo = 1;
|
|
obj3.foo = "str";
|
|
~~~~~~~~
|
|
!!! error TS2322: Type 'string' is not assignable to type 'number'.
|
|
obj3.bar = "str";
|
|
~~~
|
|
!!! error TS2339: Property 'bar' does not exist on type 'B<number>'.
|
|
}
|
|
|
|
var obj4: any;
|
|
if (obj4 instanceof B) { // can't type narrowing from any.
|
|
obj4.foo = "str";
|
|
obj4.foo = 1;
|
|
obj4.bar = "str";
|
|
}
|
|
|
|
// has multiple construct signature
|
|
interface CConstructor {
|
|
new (value: string): C1;
|
|
new (value: number): C2;
|
|
}
|
|
interface C1 {
|
|
foo: string;
|
|
bar1: number;
|
|
}
|
|
interface C2 {
|
|
foo: string;
|
|
bar2: number;
|
|
}
|
|
declare var C: CConstructor;
|
|
|
|
var obj5: C1 | A;
|
|
if (obj5 instanceof C) { // narrowed to C1.
|
|
obj5.foo;
|
|
obj5.bar1;
|
|
obj5.bar2;
|
|
~~~~
|
|
!!! error TS2339: Property 'bar2' does not exist on type 'C1'.
|
|
}
|
|
|
|
var obj6: any;
|
|
if (obj6 instanceof C) { // can't type narrowing from any.
|
|
obj6.foo;
|
|
obj6.bar1;
|
|
obj6.bar2;
|
|
}
|
|
|
|
// with object type literal
|
|
interface D {
|
|
foo: string;
|
|
}
|
|
declare var D: { new (): D; };
|
|
|
|
var obj7: D | string;
|
|
if (obj7 instanceof D) { // narrowed to D.
|
|
obj7.foo;
|
|
obj7.bar;
|
|
~~~
|
|
!!! error TS2339: Property 'bar' does not exist on type 'D'.
|
|
}
|
|
|
|
var obj8: any;
|
|
if (obj8 instanceof D) { // can't type narrowing from any.
|
|
obj8.foo;
|
|
obj8.bar;
|
|
}
|
|
|
|
// a construct signature that returns a union type
|
|
interface EConstructor {
|
|
new (): E1 | E2;
|
|
}
|
|
interface E1 {
|
|
foo: string;
|
|
bar1: number;
|
|
}
|
|
interface E2 {
|
|
foo: string;
|
|
bar2: number;
|
|
}
|
|
declare var E: EConstructor;
|
|
|
|
var obj9: E1 | A;
|
|
if (obj9 instanceof E) { // narrowed to E1.
|
|
obj9.foo;
|
|
obj9.bar1;
|
|
obj9.bar2;
|
|
~~~~
|
|
!!! error TS2339: Property 'bar2' does not exist on type 'E1'.
|
|
}
|
|
|
|
var obj10: any;
|
|
if (obj10 instanceof E) { // can't type narrowing from any.
|
|
obj10.foo;
|
|
obj10.bar1;
|
|
obj10.bar2;
|
|
}
|
|
|
|
// a construct signature that returns any
|
|
interface FConstructor {
|
|
new (): any;
|
|
}
|
|
interface F {
|
|
foo: string;
|
|
bar: number;
|
|
}
|
|
declare var F: FConstructor;
|
|
|
|
var obj11: F | string;
|
|
if (obj11 instanceof F) { // can't type narrowing, construct signiture returns any.
|
|
obj11.foo;
|
|
~~~
|
|
!!! error TS2339: Property 'foo' does not exist on type 'string | F'.
|
|
obj11.bar;
|
|
~~~
|
|
!!! error TS2339: Property 'bar' does not exist on type 'string | F'.
|
|
}
|
|
|
|
var obj12: any;
|
|
if (obj12 instanceof F) { // can't type narrowing from any.
|
|
obj12.foo;
|
|
obj12.bar;
|
|
}
|
|
|
|
// a type with a prototype, it overrides the construct signiture
|
|
interface GConstructor {
|
|
prototype: G1; // high priority
|
|
new (): G2; // low priority
|
|
}
|
|
interface G1 {
|
|
foo1: number;
|
|
}
|
|
interface G2 {
|
|
foo2: boolean;
|
|
}
|
|
declare var G: GConstructor;
|
|
|
|
var obj13: G1 | G2;
|
|
if (obj13 instanceof G) { // narrowed to G1. G1 is return type of prototype property.
|
|
obj13.foo1;
|
|
obj13.foo2;
|
|
~~~~
|
|
!!! error TS2339: Property 'foo2' does not exist on type 'G1'.
|
|
}
|
|
|
|
var obj14: any;
|
|
if (obj14 instanceof G) { // can't type narrowing from any.
|
|
obj14.foo1;
|
|
obj14.foo2;
|
|
}
|
|
|
|
// a type with a prototype that has any type
|
|
interface HConstructor {
|
|
prototype: any; // high priority, but any type is ignored. interface has implicit `prototype: any`.
|
|
new (): H; // low priority
|
|
}
|
|
interface H {
|
|
foo: number;
|
|
}
|
|
declare var H: HConstructor;
|
|
|
|
var obj15: H | string;
|
|
if (obj15 instanceof H) { // narrowed to H.
|
|
obj15.foo;
|
|
obj15.bar;
|
|
~~~
|
|
!!! error TS2339: Property 'bar' does not exist on type 'H'.
|
|
}
|
|
|
|
var obj16: any;
|
|
if (obj16 instanceof H) { // can't type narrowing from any.
|
|
obj16.foo1;
|
|
obj16.foo2;
|
|
}
|
|
|