gpt4 book ai didi

javascript - typescript 类型分配

转载 作者:搜寻专家 更新时间:2023-10-30 21:30:28 24 4
gpt4 key购买 nike

我目前正在学习 Typescript,但遇到了一个问题......

函数的类型分配

这里有 2 个简单的代码示例,它们以不同的方式编译,我不明白原因。

1 个样本

testP(): Promise<number> {
return new Promise<string>((resolve, reject) => {
resolve("string");
});
}

这段代码在编译期间返回错误,因为我没有返回数字,这很好。

2 个样本

testP(): Promise<number> {
return new Promise<any>((resolve, reject) => {
resolve("string");
});
}

这段代码正在编译,没有任何错误,我不知道为什么......

我的错误是什么?提前谢谢你!

编辑:

这是我真正想做的

export interface Animal {
name: string,
weight: number,
age: number
}

getDogs(): Promise<Dog[]> {

return this.http.get('/dogs')
.toPromise()
.then(response => response.json())
.catch(this.handleError);
}

但是这样,即使我的“响应”不是“狗”数组,也不会触发任何错误;

我错过了什么?

最佳答案

编译器无法从对 resolve 的调用中推断出 promise 的返回类型.

这段代码:

return new Promise((resolve, reject) => {

... 是以下内容的简写:

return new Promise<any>((resolve, reject) => {

然后输入 any是一种禁用类型检查的方法。您的第二个代码可以编译,但它是错误的。

如果你不想重复自己,你可以这样做:

let testP = function () {
return new Promise<string>((resolve, reject) => {
resolve("string");
});
}

这里,函数的返回类型被推断为Promise<string> .


编辑 #1(回答您的答案):Promise<any>Promise<number> 兼容, 和 "string"也与 any 兼容.但是Promise<string>Promise<number> 不兼容.事实上,any允许你做错误的代码。当您使用它时,您自己知道自己在做什么。


编辑#2:

关于这段代码:

export interface Dog {
name: string,
weight: number,
age: number
}

function getDogs(): Promise<Dog[]> {
return this.http.get('/dogs')
.toPromise()
.then(response => response.json())
.catch(this.handleError);
}

TypeScript 编译器静态地检查类型。它无法检查服务器返回的字符串值的类型,因为在运行时,浏览器上只有编译后的代码,根本没有类型元数据。

TypeScript 就像 JSDoc。它有助于描述程序的各个部分。它无助于检查您的程序动态接收的数据。

关于javascript - typescript 类型分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39913980/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com