Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.javascript > #41477 > unrolled thread
| Started by | Julio Di Egidio <julio@diegidio.name> |
|---|---|
| First post | 2023-10-25 20:03 +0200 |
| Last post | 2023-10-26 16:25 +0200 |
| Articles | 3 — 2 participants |
Back to article view | Back to comp.lang.javascript
TypeScript JSDoc generic member function Julio Di Egidio <julio@diegidio.name> - 2023-10-25 20:03 +0200
Re: TypeScript JSDoc generic member function John Harris <niam@jghnorth.org.uk.invalid> - 2023-10-26 11:28 +0100
Re: TypeScript JSDoc generic member function Julio Di Egidio <julio@diegidio.name> - 2023-10-26 16:25 +0200
| From | Julio Di Egidio <julio@diegidio.name> |
|---|---|
| Date | 2023-10-25 20:03 +0200 |
| Subject | TypeScript JSDoc generic member function |
| Message-ID | <uhbl9k$u0u5$1@dont-email.me> |
I cannot seem to find a way to tell TypeScript with JSDoc that a
member function of some object/interface takes a type parameter.
Here is a minimal example illustrating the problem:
```js
/**
* @template {unknown} T
* @callback IGet
* @param {string} key
* @returns {T | undefined}
*/
/**
* @typedef IGetter
* @type {object}
* _@template {unknown} T // how to write this?
* @property {IGet<T>} get
*/
```
Error: Cannot find name 'T'.
That of course can be done in TypeScript, but how to do it with
JSDoc? Is it at all possible?
Link to TypeScript playground:
<https://www.typescriptlang.org/play?strictNullChecks=true&noUncheckedIndexedAccess=true&allowUnusedLabels=true&noUnusedLocals=true&noUnusedParameters=true&removeComments=true&target=1&module=1&pretty=true&isolatedModules=true&useUnknownInCatchVariables=true&exactOptionalPropertyTypes=true&noFallthroughCasesInSwitch=true&noImplicitOverride=true&noPropertyAccessFromIndexSignature=true&keyofStringsOnly=true&filetype=js#code/PQKhCgAIUgBAXApgWwA4BsCGTIG8CuAdgNaED2A7oQL6QAqUMsAxpuugEabPGQCSAcUTxGcVJgBOmZHgDO8CQEtCAc1rFEAT1GwJw-BMKy8dSAB9IRACaIAZssRXqjYOHCgI0OPE2pHd-iF4JAkdHz88Mg4AK0RmeGdIJKSYAH0EFAxsRDwiUkoaeiTgYEgAC0pIeDJICiUceDLFWQB+HVQJMj8JHzxBYQAeOgA+WhVhF3AgA>
Julio
[toc] | [next] | [standalone]
| From | John Harris <niam@jghnorth.org.uk.invalid> |
|---|---|
| Date | 2023-10-26 11:28 +0100 |
| Message-ID | <uhdevh$1h52v$1@dont-email.me> |
| In reply to | #41477 |
On 25/10/2023 19:03, Julio Di Egidio wrote:
> I cannot seem to find a way to tell TypeScript with JSDoc that a
> member function of some object/interface takes a type parameter.
>
> Here is a minimal example illustrating the problem:
>
> ```js
> /**
> * @template {unknown} T
> * @callback IGet
> * @param {string} key
> * @returns {T | undefined}
> */
>
> /**
> * @typedef IGetter
> * @type {object}
> * _@template {unknown} T // how to write this?
> * @property {IGet<T>} get
> */
> ```
>
> Error: Cannot find name 'T'.
>
> That of course can be done in TypeScript, but how to do it with
> JSDoc? Is it at all possible?
>
> Link to TypeScript playground:
> <https://www.typescriptlang.org/play?strictNullChecks=true&noUncheckedIndexedAccess=true&allowUnusedLabels=true&noUnusedLocals=true&noUnusedParameters=true&removeComments=true&target=1&module=1&pretty=true&isolatedModules=true&useUnknownInCatchVariables=true&exactOptionalPropertyTypes=true&noFallthroughCasesInSwitch=true&noImplicitOverride=true&noPropertyAccessFromIndexSignature=true&keyofStringsOnly=true&filetype=js#code/PQKhCgAIUgBAXApgWwA4BsCGTIG8CuAdgNaED2A7oQL6QAqUMsAxpuugEabPGQCSAcUTxGcVJgBOmZHgDO8CQEtCAc1rFEAT1GwJw-BMKy8dSAB9IRACaIAZssRXqjYOHCgI0OPE2pHd-iF4JAkdHz88Mg4AK0RmeGdIJKSYAH0EFAxsRDwiUkoaeiTgYEgAC0pIeDJICiUceDLFWQB+HVQJMj8JHzxBYQAeOgA+WhVhF3AgA>
>
> Julio
That's the trouble with documentation programs. Users have no control
over the program's prejudices.
John
[toc] | [prev] | [next] | [standalone]
| From | Julio Di Egidio <julio@diegidio.name> |
|---|---|
| Date | 2023-10-26 16:25 +0200 |
| Message-ID | <uhdst7$1l4pq$1@dont-email.me> |
| In reply to | #41477 |
On 25/10/2023 20:03, Julio Di Egidio wrote:
> I cannot seem to find a way to tell TypeScript with JSDoc that a
> member function of some object/interface takes a type parameter.
>
> Here is a minimal example illustrating the problem:
>
> ```js
> /**
> * @template {unknown} T
> * @callback IGet
> * @param {string} key
> * @returns {T | undefined}
> */
>
> /**
> * @typedef IGetter
> * @type {object}
> * _@template {unknown} T // how to write this?
> * @property {IGet<T>} get
> */
> ```
>
> Error: Cannot find name 'T'.
>
> That of course can be done in TypeScript, but how to do it with
> [TypeScript's] JSDoc? Is it at all possible?
I was wrong, that cannot be done in TypeScript either...
Eventually, the only way I have found is to repeat the
declaration in-line, as in:
```js
/**
* @typedef IGetter
* @type {object}
* @property {<T extends unknown>(key: string) => (T | undefined)} get
*/
```
but I lose any chance to properly document that function, which
is simply quite a disaster: and not the only one, also the return
type gets messed up (becomes just `T`), to the point that I am
compelled to do something altogether different, i.e. have a
concrete object constructor.
File under the misery of an entire industry.
Julio
[toc] | [prev] | [standalone]
Back to top | Article view | comp.lang.javascript
csiph-web