Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 自定义承诺函数中的泛型返回类型_Typescript_Promise_Typescript Generics - Fatal编程技术网

Typescript 自定义承诺函数中的泛型返回类型

Typescript 自定义承诺函数中的泛型返回类型,typescript,promise,typescript-generics,Typescript,Promise,Typescript Generics,我已经使用泛型创建了一个可重用函数,它可以获取数据,以便每个响应都匹配指定的类型。如何为该函数实现一个通用返回类型,在调用该函数时可以指定该类型?(代码块2) 我得到的错误是: 类型为“(value:Test)=>void”的参数不能分配给类型为“(value:unknown)=>void | PromiseLike”的参数。 参数“value”和“value”的类型不兼容。 类型“未知”不可分配给类型“测试”。ts(2345) 你可能想让承诺a承诺根本不是一种类型;相反,它会关闭该类型值的类型

我已经使用泛型创建了一个可重用函数,它可以获取数据,以便每个响应都匹配指定的类型。如何为该函数实现一个通用返回类型,在调用该函数时可以指定该类型?(代码块2)

我得到的错误是:

类型为“(value:Test)=>void”的参数不能分配给类型为“(value:unknown)=>void | PromiseLike”的参数。
参数“value”和“value”的类型不兼容。 类型“未知”不可分配给类型“测试”。ts(2345)


你可能想让
承诺
a
承诺根本不是一种类型;相反,它会关闭该类型值的类型检查。这将允许您将
回调参数注释为
测试
,而无需编译器抱怨

这类似于通过is返回的
Body
对象从发出的JavaScript返回
承诺的方式,并且(有一个真正的
test.com
,因此我不会将其用于测试,仅供参考)不会看到两个调用之间的差异,因此,它无法知道第一个调用需要类型为
number
id
属性,而第二个调用需要类型为
string
id
属性。因此,其中至少有一个可能会导致运行时错误

有更多类型安全的方法来编写这样的东西,但它们将涉及到类型保护,在运行时实际检查您的假设。但是,如果您只想手动断言响应的类型并继续,那么,
any
可能是一个不错的选择


感谢您的快速回复,但遗憾的是,我的linting不允许任何类型:{如果您真的认为这是我就linting问题与项目经理对质的唯一方法。这不是“唯一的方法”,而是与TypeScript的库一致的处理JSON类型输出的方法。
JSON.parse()
返回
any
(wait fetch(“”)。json()
返回
承诺。就我个人而言,这一点不太好。如果允许您使用
any
(如
axios.get()
)但不编写
any
,那么可能吗?
const fetcher = (url: string) => {
  return new Promise(async (resolve, reject) => {
    try {
      const res = await axios.get(url, {
        headers: { Accept: "application/json" },
      });

      resolve(res.data);
    } catch (e) {
      Alert.alert(e.message);
      reject();
    }
  });
};
interface Test {
  id: number;
  title: string;
}

fetcher("test.com").then((value: Test) => {
  //  Do something with value
});
const fetcher = (url: string) => {
  return new Promise<any>(async (resolve, reject) => { // <-- change on this line
    try {
      const res = await axios.get(url, {
        headers: { Accept: "application/json" },
      });

      resolve(res.data);
    } catch (e) {
      Alert.alert(e.message);
      reject();
    }
  });
};


fetcher("example.com").then((value: Test) => {
  console.log(value.id.toFixed());
});
interface Other {
  id: string;
}

fetcher("example.com").then((value: Other) => {
  console.log(value.id.toUpperCase());
});