Skip to content

Adding keyword-named properties to functions generates invalid declarations #38750

Description

@ark120202

TypeScript Version: 4.0.0-dev.20200522

Search Terms:

Code

functionfoo(){}foo.null=true;

Expected behavior:

Any syntactically valid output. Since namespaces can't hold keyword names one option is generating an object type with call signature:

declarevarfoo: {(): void;null: boolean;}

This change would also allow to generate declarations for statically-analyzable dynamic property access expressions (i.e. foo["foo bar"] = true), which are currently omitted from declarations, resulting different behavior between in-project and out-of-project values.

Actual behavior:

declarefunctionfoo(): void;declarenamespacefoo{varnull: boolean;// ^^^^^^^ TS2693: 'boolean' only refers to a type, but is being used as a value here.// ^^^^^ TS1134: Variable declaration expected.}

Playground Link:https://www.typescriptlang.org/play?ts=4.0.0-dev.20200522#code/GYVwdgxgLglg9mABMOcAUBKRBvAvgKBTgDowQAbcxAXkSgCcQBTAbiA

Related Issues:

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

BugA bug in TypeScriptDomain: Declaration EmitThe issue relates to the emission of d.ts filesEffort: ModerateRequires experience with the TypeScript codebase, but feasible. Harder than "Effort: Casual".Help WantedYou can do this

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions