使用 create-react-app + typescript + immutable.js 的问题
Issue using create-react-app + typescript + immutable.js
我最近注意到 create-react-app 现在支持打字稿但是 运行 移植我现有的代码库时出现问题,该代码库使用 react-scripts-ts
其中我的大部分 类 来自 Record
can no-longer be constructed with errors of the format: Cannot set on an immutable record.
I found an old Babel issue 这听起来很相似,但我找不到任何关于如何配置 Babel 来避免这个问题的文档。我怎样才能让它工作?
我按照 here 所述使用 Immutable.js,例如
import { Record } from 'immutable'
interface PersonProps {
firstName: string
lastName: string
}
const defaultPersonProps: PersonProps = {
firstName: '',
lastName: '',
}
class Person extends Record(defaultPersonProps) implements PersonProps {
public readonly firstName!: string
public readonly lastName!: string
public constructor(values: PersonProps) {
super(values)
}
}
如果不对此进行测试,将您的代码重构为以下内容是否有帮助?
import { Record } from 'immutable'
interface PersonProps {
firstName: string
lastName: string
}
const personPropsRecord = Record({
firstName: '',
lastName: '',
});
class Person extends personPropsRecord implements PersonProps {
public readonly firstName!: string
public readonly lastName!: string
public constructor(values: PersonProps) {
super(values)
}
}
我不得不重新编写代码以避免使用 !并实现 Readonly<PersonProps>
而不是 PersonProps
以获得关于不变性的类型提示。
我认为解决这个问题的合适方法是在 "loose: false" 选项中添加“@babel/plugin-proposal-class-properties”以避免赋值(参见 babel doc on assignment vs definition :https://babeljs.io/docs/en/babel-plugin-proposal-class-properties#via-babelrc-recommended-) .它将改为使用 Object.defineProperty。 Immutable.Record.
无法赋值
这是我的基本示例,从 create-react-app --typescrip 开始,我弹出了 create-react-app 以快速测试这个 "loose: false" 选项并且它有效(参见 [= 的 babel 部分21=]): https://github.com/kimulus/typescriptimmutablerecord
我最近注意到 create-react-app 现在支持打字稿但是 运行 移植我现有的代码库时出现问题,该代码库使用 react-scripts-ts
其中我的大部分 类 来自 Record
can no-longer be constructed with errors of the format: Cannot set on an immutable record.
I found an old Babel issue 这听起来很相似,但我找不到任何关于如何配置 Babel 来避免这个问题的文档。我怎样才能让它工作?
我按照 here 所述使用 Immutable.js,例如
import { Record } from 'immutable'
interface PersonProps {
firstName: string
lastName: string
}
const defaultPersonProps: PersonProps = {
firstName: '',
lastName: '',
}
class Person extends Record(defaultPersonProps) implements PersonProps {
public readonly firstName!: string
public readonly lastName!: string
public constructor(values: PersonProps) {
super(values)
}
}
如果不对此进行测试,将您的代码重构为以下内容是否有帮助?
import { Record } from 'immutable'
interface PersonProps {
firstName: string
lastName: string
}
const personPropsRecord = Record({
firstName: '',
lastName: '',
});
class Person extends personPropsRecord implements PersonProps {
public readonly firstName!: string
public readonly lastName!: string
public constructor(values: PersonProps) {
super(values)
}
}
我不得不重新编写代码以避免使用 !并实现 Readonly<PersonProps>
而不是 PersonProps
以获得关于不变性的类型提示。
我认为解决这个问题的合适方法是在 "loose: false" 选项中添加“@babel/plugin-proposal-class-properties”以避免赋值(参见 babel doc on assignment vs definition :https://babeljs.io/docs/en/babel-plugin-proposal-class-properties#via-babelrc-recommended-) .它将改为使用 Object.defineProperty。 Immutable.Record.
无法赋值这是我的基本示例,从 create-react-app --typescrip 开始,我弹出了 create-react-app 以快速测试这个 "loose: false" 选项并且它有效(参见 [= 的 babel 部分21=]): https://github.com/kimulus/typescriptimmutablerecord