-
Notifications
You must be signed in to change notification settings - Fork 12.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support JSDoc @property
#15715
Comments
Yes I think that adding declarations in the constructor is the proper workaround for this issue. When TypeScript sees the @mhegazy / @chuckjaz Any other thoughts on this? Could the angular language service help out here? |
Not really, AngularJS (1.x) and Angular (2+) are very different. You could make a language service that specifically squelches errors and augments completions, but that's a bad a idea. |
@BrunnerLivio are you using something like Babel, or just targeting ES6 runtimes? If you're using a compiler, you can declare your class properties as so and use the appropriate plugin: class C {
/** @type {string} */ world;
foo() {
this.world;
}
} |
@DanielRosenwasser no, I'm not using Babel, I target a ES6 runtime. But thanks for the tip. What about a more general solution (not AngularJS specific)? Maybe defining in a JSDoc comment above a Class, which properties get injected into a class. For Example: /*
* @inject {string} world
*/
class MyController {
foo() {
return this.world;
}
} Unfortunately
Maybe other options? |
|
@property
See #28440 for another example of property tag usage: /**
* @description
* A Person
*
* @class
*/
function Person(name) {
/**
* @description
* Name of the person
* @property {String}
*/
this.name = name;
/**
* @description
* Another Name of the person
* @property {String}
*/
this.anotherName = name;
/**
* @description
* Another Name of the person
* @property {String}
* @name Person#AndEvenMoreNames
*/
} |
alright, I'd duplicate my case here: // my-new-type.js
/**
* MyNewType
* @typedef {Object} MyNewType
* @property {Factory~logFirst} logFirst
* @property {Factory~logSecond} logSecond
*/
/**
* MyNewType factory
* @constructor
* @param {number} first
* @param {number} second
* @returns MyNewType
*/
function Factory(first, second) {
/**
* logs first argument
* @param {number} times
*/
function logFirst(times) {
for (let i = 0; i < times; i++) {
console.log(first);
}
}
/**
* logs second argument
* @param {number} times
*/
function logSecond(times) {
for (let i = 0; i < times; i++) {
console.log(second);
}
}
return {
logFirst,
logSecond
};
}
module.exports = Factory; The example above currently doesn't work, since it "does not see" child methods. it's not only about Thanks for creating a great product. Regards, |
From @BrunnerLivio on May 8, 2017 9:1
Example code:
MyController.js
The
this.world
is marked as error, as supposed to be. But it is actually pretty annoying, because in angular you need to use quite often those component bindings. I know there's the option// @ts-ignore
, but that really pollutes the code and makes it less readable.An extensions for this would be really useful.
I use this workaround at the moment
I don't like this at all, but better than writing
// @ts-ignore
.Is there any other option / workaround?
Copied from original issue: microsoft/vscode#26192
The text was updated successfully, but these errors were encountered: