reactjs - Dokumentera gränssnitt med TypeDoc


Jag använder TypeDoc för att dokumentera min TypeScript-kod precis så här:

/**
 * @param timestampValue Date in timestamp format
 */
const getDaysInTimestamp = (timestampValue: number): number => {
  return Math.round(timestampValue / 1000)
}

Problemet är att jag använder React-funktionella komponenter på det här sättet:

interface Props {
  useLocalStorage?: boolean
  useCookies?: boolean
}

const Application: React.FunctionComponent<Props> = (props) => {
  return (
    <>
      ...
    </>
  )
}

Så att du kan använda det så här:

<Application useLocalStorage useCookies >
  ...
</Application>

Men med denna struktur kan jag inte dokumentera props för Application i detalj. Det bästa jag kan göra är detta:

/**
 * @param props Props from Application component
 */
const Application: React.FunctionComponent<Props> = (props) => {
  ...

Jag försökte använda den här typen av notation men den stöds inte:

/**
 * @param props.useLocalStorage Enable the component to store some data in the localStorage
 * @param props.useCookies Enable the component to store and read cookies
 */
const Application: React.FunctionComponent<Props> = (props) => {
  ...

Så min sista chans är att dokumentera gränssnittet direkt. Min fråga är: Finns det ett sätt att skriva TypeDoc för varje attribut av ett gränssnitt? Kanske något liknande det:

/**
 * @param useLocalStorage Enable the component to store some data in the localStorage
 * @param useCookies Enable the component to store and read cookies
 */
interface Props {
  useLocalStorage?: boolean
  useCookies?: boolean
}

Har du någon aning om hur det kan implementeras?

Svar #1

Du kan lägga till typanteckningar till gränssnitt på samma sätt som du skulle göra för klasser.

interface Props {
  /** Enable the component to store some data in the localStorage */
  useLocalStorage?: boolean

  /** Enable the component to store and read cookies */
  useCookies?: boolean
}

Alternativet @typeparam är också tillgängligt för att beskriva generiska typer, men jag är inte säker på om det stöder syntaxen Props.useLocalStorage.

/**
 * @typeParam T  Comment for type `T`.
 * You may also use the template tag.
 * @template T comment for type `T`.
 */
function doSomething<T>(target: T, text: string): number;

Relaterade artiklar