X(带有函数和状态的 JS 对象)指的是一个值,但这里使用的是一种类型

Jac*_*lla 0 typescript

在文件中,user.ts我有以下代码:

export default {
  eventsTracked: {
  },

  loggedIn(): boolean {
    return !!readCookie("user_id")
  }
}
Run Code Online (Sandbox Code Playgroud)

是否可以在其他地方自动推断可用属性(等)?

例如,在window.d.ts我想做的文件中

import User from "user"

declare global {
  interface Window {
    user: User
  }
}
export {}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试这样做时,出现错误:

2749: 'User' refers to a value, but is being used as a type here
Run Code Online (Sandbox Code Playgroud)

你会建议我做什么?

我的目标是window.user在我的代码中引用的任何地方,它都将是类型感知的。

gba*_*zzi 5

正如 Yash Baheti 所指出的,创建一个实际的类型或接口,然后创建实现它的对象是一个很好的做法。但是,如果您真的希望打字稿自动从您的对象推断类型,您可以使用typeof关键字。

user.ts

const user = {
  .. your object with properties/methods/ecc ...
} 

export type UserType = typeof user

export default user
Run Code Online (Sandbox Code Playgroud)

window.d.ts

import { UserType } from 'user';

declare global {
    interface Window {
       user: UserType
    }
}
export {}
Run Code Online (Sandbox Code Playgroud)

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