打字稿检查值是否为字符串

Ask*_*ing 13 javascript typescript

我有一个组件:

export type IDAta = string | number | null;

interface IDAta {
  data?: string | number | null;
  verify: boolean;
}

const App: React.FC<IDAta> = ({
  data = '',
  verify = true,
}) => {

  if ((data || data === 0) {
    return (
      <div>
        {verify && isText(data) ? (
          <Child text={data} />
        ) : (
          data
        )}
      </div>
    );
  }

};

export default App;
Run Code Online (Sandbox Code Playgroud)

isText 和 Child 组件期望参数仅为字符串,但这样做verify && isText(data)后我会在打字稿中遇到错误,例如Type 'number' is not assignable to type 'string'.. 这可以通过以下方式解决:

{
  verify && typeof data === 'string' && isText(data) ? ( 
  <Child text = {data as string}/>
  ) : (
    data
  )
}
Run Code Online (Sandbox Code Playgroud)

我不确定这个解决方案是否可以,因为函数typeof data === 'string'的逻辑加倍isText,如下所示:

const isText = (data: string) => {
  return typeof data === 'string';
};
Run Code Online (Sandbox Code Playgroud)

问题:解决上述问题的最佳解决方案是什么?

AKX*_*AKX 25

类型保护/谓词函数

function isText(data: unknown): data is string {
  return typeof data === 'string';
};
Run Code Online (Sandbox Code Playgroud)