Microsoft/TypeScript

Unable to use Symbol as key for jsdoc `@typedef`

Open

#47.259 geöffnet am 28. Dez. 2021

Auf GitHub ansehen
 (4 Kommentare) (0 Reaktionen) (0 zugewiesene Personen)TypeScript (6.726 Forks)batch import
BugDomain: JSDocHelp Wanted

Repository-Metriken

Stars
 (48.455 Stars)
PR-Merge-Metriken
 (Durchschn. Merge 6T 17h) (9 gemergte PRs in 30 T)

Beschreibung

Bug Report

🔎 Search Terms

jsdoc ts2454

🕗 Version & Regression Information

  • This is the behavior in every version I tried, and I reviewed the FAQ for entries about 2454

⏯ Playground Link

Playground link with relevant code

💻 Code

class Foo {
    someProp = "value";
}

const sym = Symbol("sym");
/** @typedef {Foo & { [sym]?: string }} FooWithSym */
//                     ^^^----- Variable 'sym' is used before being assigned (2454)

Note that this error only happens with strictNullChecks enabled.

🙁 Actual behavior

ts2454

🙂 Expected behavior

No errors

When using TypeScript rather than JavaScript, this error does not occur.

Here is the TypeScript equivalent: (playground)

// Normally this would be an imported class
class Foo {
    someProp = "value";
}

// add the symbol type to Foo
const sym = Symbol("sym");
type FooWithSym = Foo & {
    [sym]?: string;
}

const withoutSym = new Foo();
withoutSym[sym] = "test"; // error, as expected


const withSym : FooWithSym = new Foo();
withSym[sym] = "test"; // this works

const y = withSym[sym];
console.log(y); // y is `string | undefined`

Contributor Guide