Skip to content

TS 2.4.1 flags legal code as invalid? #17000

@dbaeumer

Description

@dbaeumer

TypeScript Version: 2.4.1

Code

namespace Config {
	export interface ProblemPattern {
		regexp?: string;
		file?: number;
		location?: number;
		line?: number;
		column?: number;
		endLine?: number;
		endColumn?: number;
		severity?: number;
		code?: number;
		message?: number;
		loop?: boolean;
	}

	export interface NamedProblemPattern extends ProblemPattern {
		name: string;
		label?: string;
	}

	export type MultiLineProblemPattern = ProblemPattern[];

	export interface NamedMultiLineProblemPattern {
		name: string;
		label?: string;
		patterns: MultiLineProblemPattern;
	}
}

export interface ProblemPattern {
	regexp: RegExp;
	file?: number;
	message?: number;
	location?: number;
	line?: number;
	character?: number;
	endLine?: number;
	endCharacter?: number;
	code?: number;
	severity?: number;
	loop?: boolean;
}

export interface NamedProblemPattern extends ProblemPattern {
	name: string;
}

export type MultiLineProblemPattern = ProblemPattern[];

export interface NamedMultiLineProblemPattern {
	name: string;
	label: string;
	patterns: MultiLineProblemPattern;
}

class Parser {

	constructor() {}

	public parse(value: Config.ProblemPattern): ProblemPattern;
	public parse(value: Config.MultiLineProblemPattern): MultiLineProblemPattern[];
	public parse(value: Config.NamedProblemPattern): NamedProblemPattern;
	public parse(value: Config.NamedMultiLineProblemPattern): NamedMultiLineProblemPattern;
	public parse(value: Config.ProblemPattern | Config.MultiLineProblemPattern | Config.NamedProblemPattern | Config.NamedMultiLineProblemPattern): any {
	}
}

function foo(value: string | Config.ProblemPattern | Config.MultiLineProblemPattern): void {
	if (typeof value === 'string') {
		//
	} else {
		let parser = new Parser();
		parser.parse(value);
	}
}

Expected behavior:
No error message

Actual behavior:
Flags an error on line 73

Metadata

Metadata

Assignees

No one assigned

    Labels

    DuplicateAn existing issue was already created

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions