ค้นหาเว็บไซต์

วิธีอธิบายคุณสมบัติที่กำหนดเองในวัตถุ window ด้วยชนิดที่นำเข้ามาใน TypeScript 3.x


ฉันจะประกาศ ("typescript": "3.x.x") ว่าภายในวัตถุ window ฉันมีตัวแปรบางตัวที่มีชนิดข้อมูลบางอย่างได้อย่างไร?

ตัวอย่างเช่น ฉันมี window.foo={ bar: 'baz' } ฉันสามารถประกาศมันได้อย่างไร? วิธีเก่าในการทำเช่นนั้นคือ:

declare global {
  interface Window {
    foo: { bar: string }
  }
}

และมันก็สร้างข้อผิดพลาดนี้

TS2669: การเพิ่มขยายสำหรับขอบเขตทั่วโลกสามารถทำได้เฉพาะเมื่อวางซ้อนโดยตรงในโมดูลภายนอกหรือประกาศโมดูลสภาพแวดล้อมเท่านั้น

ดูเหมือนว่าแค่เพิ่มระเบียนในไฟล์ d.ts บางไฟล์ก็โอเค แบบนี้:

interface Window {
  foo: { bar: string }
}

แต่ตามที่ฉันเข้าใจ ในกรณีเช่นนี้ฉันไม่สามารถนำเข้าประเภทบางอย่างในไฟล์นั้นและใช้งานในคำประกาศได้ แทนที่จะใช้ string ตัวอย่างเช่น

แล้วถ้าฉันอยากทำอะไรแบบนั้นล่ะ:

import { MyTypeFromSomewhere } from './somewhere'
interface Window {
  foo: { bar: MyTypeFromSomewhere }
}

ฉันจะขยายอินเทอร์เฟซ Window ด้วยคุณสมบัติใหม่และกำหนดประเภทให้กับมันได้อย่างไร?