Mic*_*all 6 typescript ecmascript-6
我想使用ES6扩展运算符将NodeList转换为数组.我的项目使用TypeScript,它抛出了一个错误.
const slides = [...document.querySelectorAll('.review-item')];
Run Code Online (Sandbox Code Playgroud)
这是抛出的错误,错误TS2461:类型'NodeListOf'不是数组类型
Babel可以使用该代码.是否可以在TypeScript中使用或者我需要使用其他方法Object.keys()吗?
Est*_*ask 14
Spread语法与iterables一起使用,即NodeListOf.[...document.querySelectorAll('...')]在ES6中有效(只要浏览器支持DOM迭代或polyfilled).
问题是TypeScript特有的,它不严格遵循ES5目标和更低的ES规范.默认情况下,Spread语法仅限于数组
[...document.querySelectorAll('...')];
Run Code Online (Sandbox Code Playgroud)
被转化为
document.querySelectorAll('...').slice();
Run Code Online (Sandbox Code Playgroud)
它将导致错误,并且类型系统在编译时发出错误.
一种方法是使用Array.from(可以在ES5环境中进行polyfilled)将iterable转换为数组:
Array.from(document.querySelectorAll('...'));
Run Code Online (Sandbox Code Playgroud)
另一种方法是启用downlevelIteration编译器选项.它强制TypeScript 2.3及更高版本根据具有ES5目标和更低的ES规范处理迭代:
在针对ES5或ES3时,为for..of,spread和destructuring中的iterables提供全面支持.
DOM.Iterable应在lib编译器选项中指定以包括合适的类型.由于DOM迭代器需要浏览器支持,因此可以在旧版浏览器中对它们进行填充core-js.
| 归档时间: |
|
| 查看次数: |
1664 次 |
| 最近记录: |