mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-11 10:00:13 -06:00
Add regression tests
This commit is contained in:
parent
2632ac280c
commit
0f0a8a17dc
48
tests/baselines/reference/recursiveTypeRelations.errors.txt
Normal file
48
tests/baselines/reference/recursiveTypeRelations.errors.txt
Normal file
@ -0,0 +1,48 @@
|
||||
tests/cases/compiler/recursiveTypeRelations.ts(8,5): error TS2391: Function implementation is missing or not immediately following the declaration.
|
||||
tests/cases/compiler/recursiveTypeRelations.ts(27,38): error TS2304: Cannot find name 'ClassNameObject'.
|
||||
tests/cases/compiler/recursiveTypeRelations.ts(27,61): error TS2304: Cannot find name 'ClassNameObject'.
|
||||
|
||||
|
||||
==== tests/cases/compiler/recursiveTypeRelations.ts (3 errors) ====
|
||||
// Repro from #14896
|
||||
|
||||
type Attributes<Keys extends string> = {
|
||||
[Key in Keys]: string;
|
||||
}
|
||||
|
||||
class Query<A extends Attributes<keyof A>> {
|
||||
multiply<B extends Attributes<keyof B>>(x: B): Query<A & B>;
|
||||
~~~~~~~~
|
||||
!!! error TS2391: Function implementation is missing or not immediately following the declaration.
|
||||
}
|
||||
|
||||
// Repro from #14940
|
||||
|
||||
type ClassName<S> = keyof S;
|
||||
type ClassNameMap<S> = { [K in keyof S]?: boolean }
|
||||
type ClassNameObjectMap<S> = object & ClassNameMap<S>;
|
||||
type ClassNameArg<S> = ClassName<S> | ClassNameObjectMap<S>;
|
||||
|
||||
export function css<S extends { [K in keyof S]: string }>(styles: S, ...classNames: ClassNameArg<S>[]): string {
|
||||
const args = classNames.map(arg => {
|
||||
if (arg == null) {
|
||||
return null;
|
||||
}
|
||||
if (typeof arg == "string") {
|
||||
return styles[arg];
|
||||
}
|
||||
if (typeof arg == "object") {
|
||||
return Object.keys(arg).reduce<ClassNameObject>((obj: ClassNameObject, key: keyof S) => {
|
||||
~~~~~~~~~~~~~~~
|
||||
!!! error TS2304: Cannot find name 'ClassNameObject'.
|
||||
~~~~~~~~~~~~~~~
|
||||
!!! error TS2304: Cannot find name 'ClassNameObject'.
|
||||
const exportedClassName = styles[key];
|
||||
obj[exportedClassName] = (arg as ClassNameMap<S>)[key];
|
||||
return obj;
|
||||
}, {});
|
||||
}
|
||||
});
|
||||
return "";
|
||||
}
|
||||
|
||||
70
tests/baselines/reference/recursiveTypeRelations.js
Normal file
70
tests/baselines/reference/recursiveTypeRelations.js
Normal file
@ -0,0 +1,70 @@
|
||||
//// [recursiveTypeRelations.ts]
|
||||
// Repro from #14896
|
||||
|
||||
type Attributes<Keys extends string> = {
|
||||
[Key in Keys]: string;
|
||||
}
|
||||
|
||||
class Query<A extends Attributes<keyof A>> {
|
||||
multiply<B extends Attributes<keyof B>>(x: B): Query<A & B>;
|
||||
}
|
||||
|
||||
// Repro from #14940
|
||||
|
||||
type ClassName<S> = keyof S;
|
||||
type ClassNameMap<S> = { [K in keyof S]?: boolean }
|
||||
type ClassNameObjectMap<S> = object & ClassNameMap<S>;
|
||||
type ClassNameArg<S> = ClassName<S> | ClassNameObjectMap<S>;
|
||||
|
||||
export function css<S extends { [K in keyof S]: string }>(styles: S, ...classNames: ClassNameArg<S>[]): string {
|
||||
const args = classNames.map(arg => {
|
||||
if (arg == null) {
|
||||
return null;
|
||||
}
|
||||
if (typeof arg == "string") {
|
||||
return styles[arg];
|
||||
}
|
||||
if (typeof arg == "object") {
|
||||
return Object.keys(arg).reduce<ClassNameObject>((obj: ClassNameObject, key: keyof S) => {
|
||||
const exportedClassName = styles[key];
|
||||
obj[exportedClassName] = (arg as ClassNameMap<S>)[key];
|
||||
return obj;
|
||||
}, {});
|
||||
}
|
||||
});
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
//// [recursiveTypeRelations.js]
|
||||
// Repro from #14896
|
||||
"use strict";
|
||||
exports.__esModule = true;
|
||||
var Query = (function () {
|
||||
function Query() {
|
||||
}
|
||||
return Query;
|
||||
}());
|
||||
function css(styles) {
|
||||
var classNames = [];
|
||||
for (var _i = 1; _i < arguments.length; _i++) {
|
||||
classNames[_i - 1] = arguments[_i];
|
||||
}
|
||||
var args = classNames.map(function (arg) {
|
||||
if (arg == null) {
|
||||
return null;
|
||||
}
|
||||
if (typeof arg == "string") {
|
||||
return styles[arg];
|
||||
}
|
||||
if (typeof arg == "object") {
|
||||
return Object.keys(arg).reduce(function (obj, key) {
|
||||
var exportedClassName = styles[key];
|
||||
obj[exportedClassName] = arg[key];
|
||||
return obj;
|
||||
}, {});
|
||||
}
|
||||
});
|
||||
return "";
|
||||
}
|
||||
exports.css = css;
|
||||
35
tests/cases/compiler/recursiveTypeRelations.ts
Normal file
35
tests/cases/compiler/recursiveTypeRelations.ts
Normal file
@ -0,0 +1,35 @@
|
||||
// Repro from #14896
|
||||
|
||||
type Attributes<Keys extends string> = {
|
||||
[Key in Keys]: string;
|
||||
}
|
||||
|
||||
class Query<A extends Attributes<keyof A>> {
|
||||
multiply<B extends Attributes<keyof B>>(x: B): Query<A & B>;
|
||||
}
|
||||
|
||||
// Repro from #14940
|
||||
|
||||
type ClassName<S> = keyof S;
|
||||
type ClassNameMap<S> = { [K in keyof S]?: boolean }
|
||||
type ClassNameObjectMap<S> = object & ClassNameMap<S>;
|
||||
type ClassNameArg<S> = ClassName<S> | ClassNameObjectMap<S>;
|
||||
|
||||
export function css<S extends { [K in keyof S]: string }>(styles: S, ...classNames: ClassNameArg<S>[]): string {
|
||||
const args = classNames.map(arg => {
|
||||
if (arg == null) {
|
||||
return null;
|
||||
}
|
||||
if (typeof arg == "string") {
|
||||
return styles[arg];
|
||||
}
|
||||
if (typeof arg == "object") {
|
||||
return Object.keys(arg).reduce<ClassNameObject>((obj: ClassNameObject, key: keyof S) => {
|
||||
const exportedClassName = styles[key];
|
||||
obj[exportedClassName] = (arg as ClassNameMap<S>)[key];
|
||||
return obj;
|
||||
}, {});
|
||||
}
|
||||
});
|
||||
return "";
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user