首页 > 解决方案 > 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在代码中引用什么,它都将是类型感知的。

标签: typescript

解决方案


正如 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 {}

请注意,除非您的用户对象中的每个项目都输入正确,否则打字稿将推断出可能不适合您的情况的类型。我建议您正确输入所有内容


推荐阅读