Adr*_*ciu 5 destructuring typescript ecmascript-6
创建一个简单的数组并在(空)对象中对其进行解构:
const foo: Array<number> = [1, 2, 3, 4];
const bar: Array<number> = {...foo};
Run Code Online (Sandbox Code Playgroud)
类型检查不应该在这里失败吗?bar对我来说看起来不像一个数组。编辑器根本没有抱怨并将其视为bar数组类型,即使我可以在运行时轻松检查它不是。
编辑
它看起来像是一个已知问题,因为{...foo}解构被编译为Object.assign({}, foo),并Object.assign()声明为
assign<T, U>(target: T, source: U): T & U;
Run Code Online (Sandbox Code Playgroud)
所以当第二个参数是数组时,结果与数组类型兼容。
希望当实现更好的 Object.assign 类型时它会得到修复:
我即将获得传播类型的 PR,因此当这些类型出现时,Object.assign 将更改为正确的类型:
分配(目标:T,源:U):{ ...T,...U }
如果正确实现,扩展类型不应考虑不可枚举的属性,例如length,因此您的代码将给出与以下相同的错误
const p: Array<number> = {};
// Type '{}' is not assignable to type 'number[]'.
// Property 'length' is missing in type '{}'.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
693 次 |
| 最近记录: |