sup*_*key 2 promise typescript fetch-api
我正在为fetch-api创建一个类型安全的包装器,并且我注意到打字稿编译器将其归类为完全有效的代码:
function foo(response: Response): Promise<Bar> { //response received from a fetch() call
const json: Promise<any> = response.json();
return json; //Promise<any> can be returned as Promise<Bar>?
}
Run Code Online (Sandbox Code Playgroud)
为什么可以直接返回Promise<any>as Promise<Bar>?这不应该需要某种类型的断言吗?
始终避免any。any根据定义,它可以分配给任何东西,也可以分配给任何东西而无需任何类型的断言。当用作通用类型参数时,重新排序类型(ex Promise<any>)通常可以分配给该位置(ex Promise<Bar>)上具有任何其他类型参数的任何其他实例化。
由于引入了3.0打字稿unknown(更多内容请参见此处),因为它可以为它分配任何内容,因此如果没有类型断言,就不能将其分配给其他任何东西。所以这是一个错误:
let u: Promise<unknown>
let n: Promise<number> = u; // error
Run Code Online (Sandbox Code Playgroud)
您可能还会查看tslint规则no-unsafe-any,no-any这些规则会阻止any在项目中使用tslint规则,具体取决于您要使用banning的程度any,就像我刚开始所说的那样,我会完全禁止使用它,并在少数情况下添加exception必要。
| 归档时间: |
|
| 查看次数: |
418 次 |
| 最近记录: |