typescript - Hur kan jag på ett korrekt sätt dokumentera denna generiska funktion?
/**
* Wraps a styled component to supply default props
* @template {T} - Component type
* @template {TDefaults} - Default props
* @param {T} component - Our styled component object
* @param {TDefaults} defaultProps - The object's default props
* @returns the styled component with default props applied
*/
export function withDefault<T extends { defaultProps?: Partial<TDefaults> }, TDefaults>(component: T, defaultProps: TDefaults): T & { defaultProps: TDefaults } {
// eslint-disable-next-line no-param-reassign
component.defaultProps = defaultProps;
// Cast to any necessary as we can't infer styled component type
return component as any;
}
Detta returnerar dessa fel:
5:0 warning The type 'T' is undefined jsdoc/no-undefined-types
6:0 warning The type 'TDefaults' is undefined jsdoc/no-undefined-types
9:41 warning Missing JSDoc comment jsdoc/require-jsdoc
9:135 warning Missing JSDoc comment jsdoc/require-jsdoc
Svar #1
För JSDoc @template är det som finns inom klamrarna {...} begränsningen, och namnet på templatevariabeln ska placeras efter klamrarna. Så den korrekta syntaxen bör vara:
/**
* Wraps a styled component to supply default props
* @template {{ defaultProps?: Partial<TDefaults> }} T - Component type
* @template {any} TDefaults - Default props
* @param {T} component - Our styled component object
* @param {TDefaults} defaultProps - The object's default props
* @returns the styled component with default props applied
*/
export function withDefault<T extends { defaultProps?: Partial<TDefaults> }, TDefaults>(component: T, defaultProps: TDefaults): T & { defaultProps: TDefaults } {
// eslint-disable-next-line no-param-reassign
component.defaultProps = defaultProps;
// Cast to any necessary as we can't infer styled component type
return component as any;
}
Du behöver också ställa in eslint-alternativet settings.jsdoc.mode till typescript enligt denna dokumentation för att undertrycka felet.
