Microsoft/TypeScript

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

Open

#47,259 opened on 2021幎12月28日

GitHub で芋る
 (4 comments) (0 reactions) (0 assignees)TypeScript (6,726 forks)batch import
BugDomain: JSDocHelp Wanted

Repository metrics

Stars
 (48,455 stars)
PR merge metrics
 (平均マヌゞ 6d 17h) (30d で 9 merged PRs)

説明

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`

コントリビュヌタヌガむド