Json 将泛型传递到Promise-like-Promise<;T>;?
我有以下功能:Json 将泛型传递到Promise-like-Promise<;T>;?,json,typescript,generics,promise,Json,Typescript,Generics,Promise,我有以下功能: class RestService { public async get<T>(func: string): Promise<T> { var toRet = {}; await fetch(EndPoint + func) .then(response => response.json() as Promise<T>) .then(data => {
class RestService {
public async get<T>(func: string): Promise<T> {
var toRet = {};
await fetch(EndPoint + func)
.then(response => response.json() as Promise<T>)
.then(data => {
toRet = data;
})
.catch(e => {
});
return toRet as T;
}
}
并按如下方式调用函数:
get<Model>("getmodel")
根据我的理解,Typescript支持泛型,Promise接受变量类型,我唯一的想法是我不能将泛型传递到泛型?也许这样写更好
类RestService{
公共异步获取(func:string):承诺{
返回等待获取(“”+func)
.then(response=>response.json()作为承诺)
。然后(数据=>{
返回数据;
})
.catch(e=>{
});
}
}
你也可以在操场上看到它
这样,您就不必覆盖任何类型,编译器就可以自己解决所有问题
返回类型现在是Promise
,因为catch
函数不返回任何内容。您可能会有其他的东西或什么都没有,这取决于您在发生错误时所做的操作
Typescript不会将数据
对象转换为与自动输入的T
类型匹配
例如,如果您使用
get调用该方法非常好。如果响应If始终是一个模型,那么该方法不应该是泛型的,其返回类型应该是Promise
。这就是你要问的吗?端点的响应是一个json对象,模型只是匹配json对象字段。我假设Promise,其中T是类,它会自动填充一个带有json值的类实例。因此,我可能会调用get,并期望返回类型为'AnotherModel',但我会返回一个'object',其中的字段与'AnotherModel'中的变量声明相匹配……不,它不会这样做。json()只是将json反序列化为POJO。它不知道也不关心具体的generc类型。而toRet as T
只是告诉TypeScript编译器:“相信我,对象是T类型的,我知道我在做什么”。TypeScript是纯编译时的,除非您显式地编写它,否则没有运行时强制转换/转换。
get<Model>("getmodel")
{name:"some name"}