打字稿泛型:<T,> 是什么意思?

时间:2020-12-30 16:33:38

标签: reactjs typescript

我尝试理解代码(React 应用程序的一部分):

interface SearchProps<T> {
  className?: string;
  value?: T;
  options?: T[];
  onChange?: (event: object, value: T | string, reason: string) => void;
  onInputChange?: (event: object, value: string, reason: string) => void;
  onClear?: () => void;
  renderOption?: FC<T>;
  getOptionLabel?: (option: T) => string;
}

interface TranslatedSearchProps<T> extends SearchProps<T> {
  t?: TFunction;
}

export const PureSearch = <T,>({
  className,
  value,
  options,
  onChange,
  onInputChange,
  onClear,
  renderOption,
  getOptionLabel,
  t = (key: string) => key,
}: TranslatedSearchProps<T>) => {
  return (
    <Autocomplete
      className={className}
      freeSolo
      disableClearable
      options={options || []}
      value={value}
      onChange={onChange}
      onInputChange={onInputChange}
      renderInput={SearchAppBar(t, onClear)}
      renderOption={
        renderOption ||
        ((option: T) => <ListItemText primaryTypographyProps={{ variant: 'h6' }} primary={option} />)
      }
      getOptionLabel={getOptionLabel || ((o: T) => `${o}`)}
    />
  );
};

1 个答案:

答案 0 :(得分:1)

几乎在 JS 中的任何地方,您都可以在列表样式的声明中留下一个尾随逗号,解析器将忽略它。 [0,1,2,][0,1,2] 的结果相同,{ a: true, }{ a: true } 的结果相同,等等。

正如 Jared Smith 所评论的,在这种情况下,逗号向解析器说明这是一个类型参数,而不是 JSX 标记。不过通常情况下,这不会影响执行。