Add regression test
This commit is contained in:
parent
cf998bf350
commit
e79d75a383
49
tests/baselines/reference/mappedTypeIndexedAccess.errors.txt
Normal file
49
tests/baselines/reference/mappedTypeIndexedAccess.errors.txt
Normal 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
|
||||
};
|
||||
|
43
tests/baselines/reference/mappedTypeIndexedAccess.js
Normal file
43
tests/baselines/reference/mappedTypeIndexedAccess.js
Normal 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
|
||||
};
|
29
tests/cases/compiler/mappedTypeIndexedAccess.ts
Normal file
29
tests/cases/compiler/mappedTypeIndexedAccess.ts
Normal 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
|
||||
};
|
Loading…
Reference in a new issue