Javascript 通过将常量导出为对象来释放类型信息
以下展开对象的方法提示错误: 类型.ts 接口SetAppDataAction{ type:typeof SET\u APP\u DATA//必须完全是字符串!而不仅仅是任何字符串 } 常量设置应用程序数据=设置应用程序数据 导出默认值{SET_APP_DATA} action.ts 从./types导入类型; const setAppData=appData:IAppDataState:SetAppDataAction=>{ 返回{ type:types.SET\u APP\u DATA,//Typescript错误:TS2322:类型“{SET\u APP\u DATA:string;}”不可分配给类型“SET\u APP\u DATA” 有效载荷:appData } } 谁能解释一下这里发生了什么事?类型信息是否可能因包装在对象中而丢失?输入before:完全设置应用程序数据,之后仅输入字符串Javascript 通过将常量导出为对象来释放类型信息,javascript,typescript,module,Javascript,Typescript,Module,以下展开对象的方法提示错误: 类型.ts 接口SetAppDataAction{ type:typeof SET\u APP\u DATA//必须完全是字符串!而不仅仅是任何字符串 } 常量设置应用程序数据=设置应用程序数据 导出默认值{SET_APP_DATA} action.ts 从./types导入类型; const setAppData=appData:IAppDataState:SetAppDataAction=>{ 返回{ type:types.SET\u APP\u DATA,//
是的,这很正常。在对象中放置常量会使对象可变!对象属性具有不太特定的类型。您可以使用以下方法防止这种情况: 但是,我建议您根本不要默认导出对象!而是使用名称导出:
// types.ts
export const SET_APP_DATA = "SET_APP_DATA";
是的,这很正常。在对象中放置常量会使对象可变!对象属性具有不太特定的类型。您可以使用以下方法防止这种情况: 但是,我建议您根本不要默认导出对象!而是使用名称导出:
// types.ts
export const SET_APP_DATA = "SET_APP_DATA";
另一种解决方案是使用显式类型而不是依赖类型推断
interface SetAppDataAction {
type: typeof SET_APP_DATA // need to be exactly the string! not just any string
}
const SET_APP_DATA = "SET_APP_DATA"
const objectToExport: { SET_APP_DATA: typeof SET_APP_DATA } = { SET_APP_DATA }
export default objectToExport
另一种解决方案是使用显式类型而不是依赖类型推断
interface SetAppDataAction {
type: typeof SET_APP_DATA // need to be exactly the string! not just any string
}
const SET_APP_DATA = "SET_APP_DATA"
const objectToExport: { SET_APP_DATA: typeof SET_APP_DATA } = { SET_APP_DATA }
export default objectToExport
正是我要找的!这是个好建议。有时我确实喜欢导出这样一个默认对象,当它主要用作单个值时,在这种情况下,通常需要对象。冻结它。这正是我要找的!这是个好建议。有时我确实喜欢导出这样一个对象的默认值,当它主要用作单个值时,在这种情况下,通常需要对其进行object.freeze。