typescript - X(具有函数和状态的 JS 对象)指的是一个值,但在这里使用的是一个类型
问题描述
在文件user.ts
中,我有以下代码:
export default {
eventsTracked: {
},
loggedIn(): boolean {
return !!readCookie("user_id")
}
}
是否可以在其他地方自动推断出可用的属性(等)?
例如,在window.d.ts
我想做的文件中
import User from "user"
declare global {
interface Window {
user: User
}
}
export {}
但是,当我尝试这样做时,我得到了错误:
2749: 'User' refers to a value, but is being used as a type here
你会建议我做什么?
我的目标是,无论我window.user
在代码中引用什么,它都将是类型感知的。
解决方案
正如 Yash Baheti 所指出的,创建一个实际的类型或接口,然后创建实现它的对象是一种很好的做法。但是,如果您真的希望 typescript 从您的对象中自动推断类型,您可以使用typeof
关键字。
在user.ts
:
const user = {
.. your object with properties/methods/ecc ...
}
export type UserType = typeof user
export default user
在window.d.ts
:
import { UserType } from 'user';
declare global {
interface Window {
user: UserType
}
}
export {}
请注意,除非您的用户对象中的每个项目都输入正确,否则打字稿将推断出可能不适合您的情况的类型。我建议您正确输入所有内容
推荐阅读
- python - 使用 Conda 构建带有扩展的 python 包会导致分段错误
- php - 通过此查询的结果过滤 eloquent 查询
- android - 动画在哪个线程上运行?
- html - 如何通过按 Tab 键取消选择输入内容?
- mongodb - 如何使用查询数据在 mongodb 单一聚合中执行另一个查询?
- c++ - 如何从监视列表中隐藏一些类公共属性?
- html - 更新 html 后 iframe 不变
- placeholder - CKeditor 5(在线生成器)坚持在文本字段中有占位符
- c - 第二个“if”语句是什么意思(凯撒密码)
- mongodb - 在 mongodb 中查找所有未读对话