首页 > 解决方案 > 打字稿 - 函数应该返回一个字符串而不是 () -> 字符串

问题描述

我正在尝试添加以下代码来检测浏览器,但我得到的错误browserData是:

Type '{ browserName: () => string; browserVersion: string | null; operatingSystem: string | (() => string); } | { browserName: string; browserVersion: string; operatingSystem: string; }' is not assignable to type 'BrowserData'.
Type '{ browserName: () => string; browserVersion: string | null; operatingSystem: string | (() => string); }' is not assignable to type 'BrowserData'.
Types of property 'browserName' are incompatible.
Type '() => string' is not assignable to type 'string'.ts(2322)
function getBrowserInfo(): BrowserData {
  const browserInfo = detectBrowser.detect();
  const browserData: BrowserData =
    browserInfo !== null
      ? {
          browserName: browserInfo.name.toString,
          browserVersion: browserInfo.version,
          operatingSystem:
            browserInfo.os !== null ? browserInfo.os.toString : '',
        }
      : { browserName: '', browserVersion: '', operatingSystem: '' };
  return browserData;
}

declare type BrowserData = {
  browserName: string;
  browserVersion: string;
  operatingSystem: string;
};

我看到有一个错误,因为返回值应该是一个字符串,而不是一个返回字符串的函数。我该如何纠正?

标签: javascripttypescript

解决方案


您需要调用这些toString方法 - 否则,您正在制作browserName并且可能operatingSystem是一个功能:

function getBrowserInfo(): BrowserData {
  const browserInfo = detectBrowser.detect();
  const browserData: BrowserData =
    browserInfo !== null ?
    {
      browserName: browserInfo.name.toString(),
      browserVersion: browserInfo.version,
      operatingSystem: browserInfo.os !== null ? browserInfo.os.toString() : '',
    } :
    {
      browserName: '',
      browserVersion: '',
      operatingSystem: ''
    };
  return browserData;
}

推荐阅读