首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >preact-cli/babel/typescript -让Symbol.iterator和[...spread]正常工作

preact-cli/babel/typescript -让Symbol.iterator和[...spread]正常工作
EN

Stack Overflow用户
提问于 2020-10-11 04:20:38
回答 2查看 238关注 0票数 4

在我的代码中,我有一个名为range的函数,它可以生成范围。具体实现如下:

代码语言:javascript
复制
export const range = (min: number, max: number) => {
    // ...

    return {
        // ...
        *[Symbol.iterator]() {
            let n = min

            while (n <= max) yield n++
        }
    }
}

正如您所期望的那样,Array.from(range(1, 5))提供了[1, 2, 3, 4, 5]

代码语言:javascript
复制
// console.log(() => [...range(1, 5)])
ƒ () { return [].concat(range(1, 5)) }

.tsconfig与我以前使用的完全相同,以ESNext为目标,将downlevelIteration更改为truefalse没有任何作用,因此我相当有把握地认为问题不存在。

package.json

代码语言:javascript
复制
"browserslist": "last 3 chrome versions, last 3 firefox versions"

.babelrc

代码语言:javascript
复制
{ "presets": [ [ "preact-cli/babel", { "modules": "commonjs" } ] ] }

下面是相关的部分:

代码语言:javascript
复制
webpack(config, env, helpers, options) {
    // ...

    config.module.rules = config.module.rules.map(rule => {
        if (rule.loader === 'babel-loader') {
            const use = [
                {
                    loader: 'babel-loader',
                    options: rule.options
                },
                {
                    loader: 'ts-loader'
                }
            ]

            return {
                ...rule,
                loader: undefined,
                options: undefined,
                use,
            }
        }
        // ...    
    })
    // ...
}

我该如何着手解决这个问题呢?

EN

回答 2

Stack Overflow用户

发布于 2021-05-11 05:02:26

我将在评论中重复@PeterLehnhardt提供的解决方案,以便每个人都能看到: Create preact.config.js

代码语言:javascript
复制
export default {
  webpack(config, env, helpers, options) {
    const { rule } = helpers.getLoadersByName(config, 'babel-loader')[0];
    const babelConfig = rule.options;

    babelConfig.assumptions = {
      iterableIsArray: false, 
    }
  }
}
票数 1
EN

Stack Overflow用户

发布于 2020-10-11 19:35:35

最后,通过简单地完全删除babel-loader修复了这个问题。我用以下代码替换了preact.config.js的相关部分:

代码语言:javascript
复制
if (rule.loader === 'babel-loader') {
    return { loader: 'ts-loader' }
}

不过,我仍然很好奇如何在不完全移除Babel的情况下解决这个问题。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64297902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档