Microsoft/TypeScript

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

Open

#47 259 ouverte le 28 déc. 2021

Voir sur GitHub
 (4 commentaires) (0 réactions) (0 assignés)TypeScript (6 726 forks)batch import
BugDomain: JSDocHelp Wanted

Métriques du dépôt

Stars
 (48 455 stars)
Métriques de merge PR
 (Merge moyen 6j 17h) (9 PRs mergées en 30 j)

Description

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`

Guide contributeur