| ▲ | g947o 2 days ago |
| Last time I checked, there isn't a way to extend types (https://www.typescriptlang.org/docs/handbook/2/objects.html#...) that works exactly like in TypeScript. |
|
| ▲ | culi 2 days ago | parent | next [-] |
| JSDoc actually has the @extends tag /**
* @typedef {object} Dog @extends Animal
* @property {string} childProp
*/
But I don't really use that feature in TypeScript. Instead I rely on `&`. This works in exactly the same way in JSDoc.Also if you're curious about the equivalent of `extends` in generic slots, here's an example I have from a different project /**
* @template {Record<string, unknown>} [T=Record<string, unknown>]
* @typedef {{
* children?: NewickNode<T>[];
* name?: string;
* length?: number;
* data?: T;
* }} NewickNode
*/
The generic slot here, T, is "extended" by Record<string, unknown>. The equivalent in TypeScript would look like type NewickNode<T extends Record<string, unknown> = Record<string, unknown>> = {
children?: NewickNode<T>[];
name?: string;
length?: number;
data?: T;
};
|
| |
| ▲ | llimllib a day ago | parent | next [-] | | the equivalent in typescript would be "export type" not just "type", since as I pointed out that type is exported without you being able to control it | |
| ▲ | KPGv2 a day ago | parent | prev [-] | | I don't understand why someone would opt for "write Typescript, but add a bunch of extra characters, make the syntax clunkier, and throw away all the benefits of compile-time errors because we'd rather have runtime errors" in order to save, what, a microsecond stripping typescript out of TS files? Everyone's complaining about "the build step" but the build step is just an eye blink of stripping out some things that match a regex. | | |
| ▲ | culi a day ago | parent [-] | | > throw away all the benefits of compile-time errors because we'd rather have runtime errors This is inaccurate on multiple counts. First of all, you can still run tsc with JSDoc if you want a hard error and you can still use strict mode with JSDoc. Your tsconfig file governs JSDoc-typed code just the same as it governs .ts-typed code. In both cases you can also ignore the red squigglies (the exact same red squigglies) and end up with runtime errors. Nobody is advocating for reduced type safety or increased runtime errors. I also think there are many valid reasons to loathe a build step (like not dealing with the headache that is the discrepency between the way the TS compiler deals with import paths vs js runtimes). All that being said, I'm not really trying to convince anyone to stop using TypeScript. I'm simply pointing out that using JSDoc is using TypeScript. It's the same language service. |
|
|
|
| ▲ | 2 days ago | parent | prev | next [-] |
| [deleted] |
|
| ▲ | auxiliarymoose 2 days ago | parent | prev [-] |
| You can use `&` operator to combine types. Works for adding fields, making branded types, etc. |
| |