Add regression test

This commit is contained in:
Anders Hejlsberg 2017-08-25 08:55:43 -07:00
parent cf998bf350
commit e79d75a383
3 changed files with 121 additions and 0 deletions

View file

@ -0,0 +1,49 @@
tests/cases/compiler/mappedTypeIndexedAccess.ts(18,5): error TS2322: Type '{ key: "foo"; value: number; }' is not assignable to type '{ key: "foo"; value: string; } | { key: "bar"; value: number; }'.
Type '{ key: "foo"; value: number; }' is not assignable to type '{ key: "foo"; value: string; }'.
Types of property 'value' are incompatible.
Type 'number' is not assignable to type 'string'.
tests/cases/compiler/mappedTypeIndexedAccess.ts(24,5): error TS2322: Type '{ key: "foo"; value: number; }' is not assignable to type '{ key: "foo"; value: string; } | { key: "bar"; value: number; }'.
Type '{ key: "foo"; value: number; }' is not assignable to type '{ key: "foo"; value: string; }'.
Types of property 'value' are incompatible.
Type 'number' is not assignable to type 'string'.
==== tests/cases/compiler/mappedTypeIndexedAccess.ts (2 errors) ====
// Repro from #15756
type Pairs<T> = {
[TKey in keyof T]: {
key: TKey;
value: T[TKey];
};
};
type Pair<T> = Pairs<T>[keyof T];
type FooBar = {
foo: string;
bar: number;
};
// Error expected here
let pair1: Pair<FooBar> = {
~~~~~
!!! error TS2322: Type '{ key: "foo"; value: number; }' is not assignable to type '{ key: "foo"; value: string; } | { key: "bar"; value: number; }'.
!!! error TS2322: Type '{ key: "foo"; value: number; }' is not assignable to type '{ key: "foo"; value: string; }'.
!!! error TS2322: Types of property 'value' are incompatible.
!!! error TS2322: Type 'number' is not assignable to type 'string'.
key: "foo",
value: 3
};
// Error expected here
let pair2: Pairs<FooBar>[keyof FooBar] = {
~~~~~
!!! error TS2322: Type '{ key: "foo"; value: number; }' is not assignable to type '{ key: "foo"; value: string; } | { key: "bar"; value: number; }'.
!!! error TS2322: Type '{ key: "foo"; value: number; }' is not assignable to type '{ key: "foo"; value: string; }'.
!!! error TS2322: Types of property 'value' are incompatible.
!!! error TS2322: Type 'number' is not assignable to type 'string'.
key: "foo",
value: 3
};

View file

@ -0,0 +1,43 @@
//// [mappedTypeIndexedAccess.ts]
// Repro from #15756
type Pairs<T> = {
[TKey in keyof T]: {
key: TKey;
value: T[TKey];
};
};
type Pair<T> = Pairs<T>[keyof T];
type FooBar = {
foo: string;
bar: number;
};
// Error expected here
let pair1: Pair<FooBar> = {
key: "foo",
value: 3
};
// Error expected here
let pair2: Pairs<FooBar>[keyof FooBar] = {
key: "foo",
value: 3
};
//// [mappedTypeIndexedAccess.js]
"use strict";
// Repro from #15756
// Error expected here
var pair1 = {
key: "foo",
value: 3
};
// Error expected here
var pair2 = {
key: "foo",
value: 3
};

View file

@ -0,0 +1,29 @@
// @strict: true
// Repro from #15756
type Pairs<T> = {
[TKey in keyof T]: {
key: TKey;
value: T[TKey];
};
};
type Pair<T> = Pairs<T>[keyof T];
type FooBar = {
foo: string;
bar: number;
};
// Error expected here
let pair1: Pair<FooBar> = {
key: "foo",
value: 3
};
// Error expected here
let pair2: Pairs<FooBar>[keyof FooBar] = {
key: "foo",
value: 3
};