আপনি কীভাবে স্পষ্টতই টাইপস্ক্রিপ্টে `উইন্ডোজ` এ একটি নতুন সম্পত্তি সেট করবেন?


617

আমি স্পষ্টভাবে একটি সম্পত্তি সেট করে আমার সামগ্রীর জন্য বিশ্বব্যাপী নেমস্পেস সেটআপ করি window

window.MyNamespace = window.MyNamespace || {};

টাইপস্ক্রিপ্ট আন্ডারলাইন করে MyNamespaceএবং অভিযোগ করে যে:

'মাইনেমস্পেস' বৈশিষ্ট্যটি 'উইন্ডো' কোনও "টাইপের মানের উপর বিদ্যমান নেই

আমি MyNamespaceএকটি এম্বিয়েন্ট ভেরিয়েবল হিসাবে ঘোষণা করে এবং এক্সপ্লিটটিসটি বাদ দিয়ে কোডটি কাজ করতে windowপারি তবে আমি এটি করতে চাই না।

declare var MyNamespace: any;

MyNamespace = MyNamespace || {};

আমি কীভাবে windowসেখানে থাকতে পারি এবং টাইপস্ক্রিপ্টকে খুশি করতে পারি ?

পার্শ্ব নোট হিসাবে আমি এটি বিশেষত মজার মনে করি যে টাইপস্ক্রিপ্ট অভিযোগ করে যেহেতু এটি আমাকে বলে যে windowএটি টাইপ anyযা স্পষ্টত যে কোনও কিছু থাকতে পারে।


দেখতে লিংক
MHS

উত্তর:


690

শুধু এই উত্তর পাওয়া অন্য Stackoverflow প্রশ্ন উত্তর

declare global {
    interface Window { MyNamespace: any; }
}

window.MyNamespace = window.MyNamespace || {};

মূলত windowআপনার নতুন সম্পত্তি সম্পর্কে এটি জানাতে আপনার বিদ্যমান ইন্টারফেসটি প্রসারিত করতে হবে।


11
উইন্ডোতে রাজধানী ডাব্লু নোট করুন। এটা আমাকে ছিটকে গেল।
আজম

2
Tsc 1.0.1.0 এর সাথে সংকলন করতে আমি এটি পেতে পারি না। যদিও ব্লেক মিচেলের উত্তর আমার পক্ষে কাজ করেছে।
প্যাট

43
সচেতন থাকুন যে এটি কেবলমাত্র পৃথক .d.tsফাইলে ঘোষিত হলেই কাজ করে । .tsআমদানি এবং রফতানি নিজে ব্যবহার করে এমন কোনও ফাইলে ব্যবহৃত হলে এটি কাজ করে না । এই উত্তর দেখুন ।
সিডিউথ

36
declare global { interface Window { ... } }টাইপ করা বিষয় 2.5.2 সঙ্গে কাজ, জন্য কোন প্রয়োজন .d.tsফাইল উপরে উল্লিখিত হিসাবে
tanguy_k

2
প্রথমে টাইপস্ক্রিপ্ট আমাকে বলেছিল:, error TS1234: An ambient module declaration is only allowed at the top level in a file.আমি যখন এটি ফাইলের শীর্ষে রাখি তখন এটি ত্রুটিটি ঠিক করেছিল, তাই আপনাকেও এটি করতে হবে।
জেলফির কালটসটহল

397

এটিকে গতিশীল রাখতে কেবল ব্যবহার করুন:

(<any>window).MyNamespace

9
কোনও ধারণা কীভাবে এটি একটি টিএসএক্স ফাইলে করবেন?
velop

1
@ মার্টিন: <নতুন> এটিকে সুস্পষ্ট করে তোলে তাই এটি ঠিক কাজ করে, আমি বিশ্বাস করি। অন্য: আপনি যদি প্রতিক্রিয়া বা অন্যান্য জেএসএক্স পরিবেশের (যেমন টিএসএক্স সিনট্যাক্সের ফলাফল সহ) টাইপস্ক্রিপ্ট ব্যবহার করছেন তবে এর asপরিবর্তে আপনাকে ব্যবহার করতে হবে <>নীচে @ ডেভিড-বালকের উত্তর দেখুন
ডন

29
আমাকে (উইন্ডোটি যেকোন হিসাবে) ব্যবহার করতে হয়েছিল yমাইনেমস্পেস
আরসালান আহমদ

একইভাবে this-return (<any> this)['something in scope']
হ্যাঙ্ককা

1
আমাকে এই লাইনে tslint অক্ষম করতে হয়েছিল/* tslint:disable */
মাইকেল ইয়াগুদেভ

197

টাইপসক্রিপ্ট হিসাবে ^ 3.4.3 এই সমাধান দীর্ঘতর কাজ করে না

অথবা ...

আপনি কেবল টাইপ করতে পারেন:

window['MyNamespace']

এবং আপনি একটি সংকলন ত্রুটি পাবেন না এবং এটি টাইপিংয়ের মতো একই কাজ করে window.MyNamespace


15
তবে আপনি সম্ভবত একটি স্লিন্ট ত্রুটি পাবেন ... আপনার যদি অবশ্যই একটি থাকে
smnbbrv

69
এটি পুরোপুরি শক্ত টাইপিংয়ের মুখে উড়ে যায়, টাইপস্ক্রিপ্টের পিছনে পুরো ধারণা।
d512

18
@ ব্যবহারকারী 1334007 গ্লোবালগুলি ব্যবহার করে তাও করে। তবে কিছু লিগ্যাসি কোড এর প্রয়োজন requires
নাথানচাহিল

3
@ রামেশ window['MyNamespace']()(কেবল বন্ধনী যুক্ত করুন)
আইব্যাফ

6
"এটি পুরোপুরি শক্ত টাইপিংয়ের মুখে উড়ে যায়, পুরো ধারণাটি টাইপস্ক্রিপ্টের পিছনে।" ভাল!
কোডি

188

টিএসএক্স ব্যবহার করছেন? অন্য কোনও উত্তরই আমার পক্ষে কাজ করছে না।

আমি যা করেছি তা এখানে:

(window as any).MyNamespace


44
এটি টিএসএক্স ব্যবহার করার সময় ব্যতীত একই, কারণ <any>জেএসএক্স হিসাবে ব্যাখ্যা করা হয়, কোনও প্রকারের .ালাই নয়।
জ্যাক বুন

1
ধন্যবাদ @ ডেভিড, এটি নতুন তৈরি করুন প্রতিক্রিয়া অ্যাপ্লিকেশন এবং টাইপস্ক্রিপ্ট সংস্করণ সহ একটি কবিতার মতো কাজ করেছিল, পূর্বে এটি কাজ করছিল: (<নতুন> উইন্ডো) ।আপনি नेमস্পেস, তবে এখন এটি নতুন টাইপ স্ক্রিপ্ট সংস্করণে 3.5.x ভাঙছে।
জিগনেশ রাওয়াল

উইন্ডো কোন হিসাবে? তাহলে আপনি কেন টাইপ স্ক্রিপ্ট ব্যবহার করবেন? কেবল জাভাস্ক্রিপ্ট এক্স ব্যবহার করুন)
মার্কোলে

71

গৃহীত উত্তর হ'ল আমি যা ব্যবহার করেছি তবে টাইপস্ক্রিপ্ট ০.৯ দিয়ে। * এটি আর কাজ করে না। Windowইন্টারফেসের নতুন সংজ্ঞাটি বিল্ট-ইন সংজ্ঞাটিকে আরও বাড়ানোর পরিবর্তে পুরোপুরি প্রতিস্থাপন করবে বলে মনে হচ্ছে।

পরিবর্তে আমি এটি করার চেষ্টা করেছি:

interface MyWindow extends Window {
    myFunction(): void;
}

declare var window: MyWindow;

আপডেট: টাইপস্ক্রিপ্ট 0.9.5 দিয়ে স্বীকৃত উত্তরটি আবার কাজ করছে।


2
এটি টাইপস্ক্রিপ্ট 2.0.8 দ্বারা ব্যবহৃত মডিউলগুলির সাথেও কাজ করে। উদাহরণ: export default class MyClass{ foo(){ ... } ... } interface MyWindow extends Window{ mc: MyClass } declare var window: MyWindow window.mc = new MyClass() তারপরে আপনি foo () উদাহরণস্বরূপ Chrome দেব সরঞ্জাম কনসোলের মতো কল করতে পারেন mc.foo()
মার্টিন মাজেউস্কি

আপনি যদি বিশ্বকে কিছু হিসাবে ঘোষণা করতে না চান তবে এটি খুব সুন্দর উত্তর is অন্যদিকে, আপনার প্রয়োজন declare var...প্রতিটি ফাইলকে কল করতে হবে।
পুস

এই পদ্ধতির জন্য প্লাস ওয়ান কারণ এই ক্ষেত্রে আপনি অন্য প্যাকেজগুলির সাথে দ্বন্দ্ব করেন না যা মনোোরপোতে বিশ্বব্যাপী উইন্ডো প্রসারিত করে।
দিমিত্রি সোরিন

ধন্যবাদ! সেরা উত্তর আইএমও। Windowএটি কোনও ভ্যানিলা উইন্ডো নয় এমন সাধারণ সত্যটির জন্য কারওর ওভাররাইড করা উচিত নয় । কেবল টাইপ চেকিংকে সাবস্কেন্টিং করা বা টিএসকে বোকা বানানোর চেষ্টা করাও এটি করার উপায় নয়।
রুটার উইলিয়ামস

এটি টিএস 3.6 হিসাবে কাজ করে না, দুর্ভাগ্যক্রমে
জ্যাকব সোডারলন্ড

65

গ্লোবাল হ'ল "অশুভ" :), আমি মনে করি বহনযোগ্যতা রাখার সর্বোত্তম উপায় হ'ল:

প্রথমে আপনি ইন্টারফেসটি রফতানি করুন: (যেমন: ./custom.window.ts)

export interface CustomWindow extends Window {
    customAttribute: any;
}

দ্বিতীয় আপনি আমদানি করুন

import {CustomWindow} from './custom.window.ts';

কাস্টম উইন্ডো সহ তৃতীয় কাস্ট গ্লোবাল ভার উইন্ডো

declare let window: CustomWindow;

আপনি যদি উইন্ডো অবজেক্টের বিদ্যমান বৈশিষ্ট্যগুলি ব্যবহার করেন তবে এইভাবে আলাদা আইডিইতে আপনারও লাল রেখা নেই, তাই শেষে চেষ্টা করুন:

window.customAttribute = 'works';
window.location.href = '/works';

টাইপস্ক্রিপ্ট ২.৪.x এবং সর্বশেষতমের সাথে পরীক্ষিত!


1
বিশ্বব্যাপী কেন খারাপ তা আপনি প্রসারিত করতে চাইতে পারেন। আমাদের ক্ষেত্রে আমরা উইন্ডো অবজেক্টে একটি মানহীন এপিআই ব্যবহার করছি। এটি আপাতত পলিফিল্ড। আসলেই কি মন্দ?
ম্যাথিজস সেগার্স

1
@ ম্যাথিজস সিগার্স আমি বিশেষত আপনার কেস জানি না তবে .. গ্লোবালগুলি সম্পর্কে দুষ্টতা কেবল জাভাস্ক্রিপ্ট সম্পর্কেই নয় .. প্রতিটি ভাষায় থাকে .. এর কিছু কারণ রয়েছে: - আপনি ভাল ডিজাইনের ধরণ প্রয়োগ করতে পারবেন না - স্মৃতি এবং পারফরম্যান্স ইস্যু (আপনি এগুলি সর্বত্র রাখুন, স্ট্রিং অবজেক্টের সাথে কিছু সংযুক্ত করার চেষ্টা করুন এবং দেখুন যখন আপনি নতুন স্ট্রিং করেন তখন কী ঘটেছিল) - নাম সংঘর্ষের ফলে কোডে পার্শ্ব প্রতিক্রিয়া দেখা দেয় .. (বিশেষত জাভাস্ক্রিপ্টে যেটি অ্যাসিঙ্ক প্রকৃতিযুক্ত) আমি চালিয়ে যেতে পারি তবে আমার মনে হয় আপনি চিত্রটি চিত্রিত করতে পারেন বিশ্রাম ...
onalbi

1
@ ওনবী আমি আক্ষরিক অর্থে ব্রাউজারের একটি বৈশিষ্ট্য সম্পর্কে কথা বলছি। এটি ব্রাউজার হওয়ার পরে এটি বিশ্বব্যাপী উপলব্ধ। আপনি কি সত্যিই এটি বিশ্বব্যাপী সংজ্ঞা জন্য যেতে ভুল পরামর্শ দেবেন? আমি বোঝাতে চাইছি আমরা পনিফিলস বাস্তবায়ন করতে পারলাম তবে এটি ব্রাউজারগুলিকে ফুটিয়ে তুলবে যা আসলে বৈশিষ্ট্যটি সমর্থন করে (যেমন ফুলস্ক্রিন এপিআই)। এটি বলেছিল যে আমি বিশ্বাস করি না যে সমস্ত গ্লোবালগুলি অবিচল থাকে।
ম্যাথিজস সেগারস

2
@ ম্যাথিজস সিজারস আমার মতে গ্লোবাল ভেরিয়েবল ব্যবহার করা বা পরিবর্তন করা আমাদের এড়াতে হবে যেখানে আমরা পারব .. সত্য যে ব্রাউজারটি বিদ্যমান থেকে পাওয়া যায় তবে এটি সত্য যেটি সর্বদা রূপান্তরিত ছিল .. সুতরাং উদাহরণস্বরূপ যদি আমরা এখন সংজ্ঞা করি উইন্ডো। ফিচার = 'বৈশিষ্ট্য'; এবং এটি কোডে বৃহত্তর উপায়ে ব্যবহৃত হয় .. উইন্ডো ফিফারটি যদি সমস্ত কোডের ব্রাউজারগুলিতে যুক্ত করা হয় তবে এই বৈশিষ্ট্যটি ওভাররাইড হয়ে যায় .. যাইহোক আমি আমার বাক্যটির একটি ব্যাখ্যা দিয়েছি যে আপনি আপনার বিরুদ্ধে যাবেন না ... শুভেচ্ছা ...
onalbi

48

আপনার যদি প্রয়োজন হয় windowএমন কাস্টম টাইপের সাহায্যে অবজেক্টটি প্রসারিত importকরতে চান তবে নিম্নলিখিত পদ্ধতিটি ব্যবহার করতে পারেন:

window.d.ts

import MyInterface from './MyInterface';

declare global {
    interface Window {
        propName: MyInterface
    }
}

হ্যান্ডবুকের 'ডিক্লেয়ারেশন মার্জিং' বিভাগে 'গ্লোবাল অগমেন্টেশন' দেখুন: https://www.typescriptlang.org/docs/handbook/declaration-merging.html#global-aumentedation


43

কৌনিক সিএলআই ব্যবহারকারীদের জন্য এটি সোজা:

src / polyfills.ts

declare global {
  interface Window {
    myCustomFn: () => void;
  }
}

আমার-অর্ডারি utils.ts

window.myCustomFn = function () {
  ...
};

আপনি যদি ইন্টেলিজ ব্যবহার করে থাকেন তবে আপনার নতুন পলিফিলগুলি তোলার আগে আপনার আইডিইতে নিম্নলিখিত সেটিংটি পরিবর্তন করতে হবে:

> File 
> Settings 
> Languages & Frameworks 
> TypeScript 
> check 'Use TypeScript Service'.

1
declare globalকৌতুকটি, এবং এই উত্তরটি
কৌনিক

31

মিডলওয়্যারের সাথে রেডাক্স ডিভলটুলগুলি ব্যবহার করার সময় আমার কেবল একমাত্র ঘটনাটি ঘটেনি।

আমি কেবল করেছি:

const composeEnhancers = (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;

অথবা আপনি করতে পারেন:

let myWindow = window as any;

এবং তারপর myWindow.myProp = 'my value';


1
এই ক্ষেত্রে আপনি এনপিএম প্যাকেজটিও ইনস্টল করতে পারেন, যা সমস্ত সংজ্ঞা যুক্ত করে
ডক্সে

আপনি এটি করতে পারেন, তবে এটি প্রশ্নের উত্তর নয়, বরং একটি
কার্যতালিকা

এর জন্য ধন্যবাদ, আমি টাইপস্ক্রিপ্টের অধীনে (যেকোন উইন্ডো) ব্যবহার করে রিডুএক্স সরঞ্জামগুলি যথাযথভাবে সক্ষম করতে পেরেছিলাম ___ REDUX_DEVTOOLS_EXTENSION__ && (যে কোনও উইন্ডো) ___ REDUX_DEVTOOLS_EXTENSION __ ())
ড্যানিভারিও

20

অন্যান্য উত্তরগুলির বেশিরভাগই নিখুঁত নয়।

  • তাদের মধ্যে কিছু কেবল দোকানের জন্য প্রকারের অনুক্রমকে দমন করে।
  • অন্য কেউ কেউ কেবল গ্লোবাল ভেরিয়েবলকে নেমস্পেস হিসাবে বিবেচনা করে তবে ইন্টারফেস / শ্রেণি হিসাবে নয়

আমিও আজ সকালে একই রকম সমস্যার মুখোমুখি হই। আমি এসও তে এতগুলি "সমাধান" চেষ্টা করেছিলাম, তবে এগুলির মধ্যে কেউই কোনও ধরণের ত্রুটি একেবারেই তৈরি করে না এবং আইডিইতে (ওয়েবস্টর্ম বা ভিএসকোড) ট্রিপিং টাইপ জাম্পিং সক্ষম করে।

অবশেষে, এখান থেকে

https://github.com/Microsoft/TypeScript/issues/3180#issuecomment-102523512

, আমি গ্লোবাল ভেরিয়েবলের জন্য টাইপগুলি সংযুক্ত করার একটি যুক্তিসঙ্গত সমাধান খুঁজে পাই যা ইন্টারফেস / শ্রেণি এবং নেমস্পেস উভয় হিসাবে কাজ করে

উদাহরণ নীচে:

// typings.d.ts
declare interface Window {
    myNamespace?: MyNamespace & typeof MyNamespace
}

declare interface MyNamespace {
    somemethod?()
}

declare namespace MyNamespace {
    // ...
}

এখন, উপরের কোডটি গ্লোবাল ভেরিয়েবলের (উইন্ডোর বৈশিষ্ট্য) সাথে নেমস্পেস MyNamespaceএবং ইন্টারফেসের টাইপগুলি মার্জ করে ।MyNamespacemyNamespace


2
ধন্যবাদ - এটিই কেবলমাত্র আপনি আপাতদৃষ্টিতে পরিবেষ্টিত অ-মডিউল প্রসঙ্গে ব্যবহার করতে পারেন।
টাইলার সেবাস্তিয়ান

18

আশেপাশে উত্তরগুলি সন্ধান করার পরে, আমি মনে করি এই পৃষ্ঠাটি সহায়ক হতে পারে। https://www.typescriptlang.org/docs/handbook/declaration-merging.html#global-augmentation ঘোষণার সংশ্লেষের ইতিহাস সম্পর্কে নিশ্চিত নয়, তবে কেন এটি নীচে কাজ করতে পারে তা ব্যাখ্যা করে।

declare global {
    interface Window { MyNamespace: any; }
}

window.MyNamespace = window.MyNamespace || {};

13

এটি কীভাবে করবেন তা এখানে আপনি যদি টাইপস্ক্রিপ্ট সংজ্ঞা পরিচালক ব্যবহার করেন !

npm install typings --global

তৈরি করুন typings/custom/window.d.ts:

interface Window {
  MyNamespace: any;
}

declare var window: Window;

আপনার কাস্টম টাইপ ইনস্টল করুন:

typings install file:typings/custom/window.d.ts --save --global

হয়ে গেল, ব্যবহার কর! টাইপস্ক্রিপ্ট আর অভিযোগ করবে না:

window.MyNamespace = window.MyNamespace || {};

1
FWIW typingsটাইপ করা বিষয় 2.0 (মিড 2016) সঙ্গে অপ্রচলিত হয়ে দাঁড়াল, আর মালিক দ্বারা আর্কাইভ করা হয়েছে।
মিঃ মিঃ

13

টাইপসক্রিপ্ট স্ট্রিং বৈশিষ্ট্যে টাইপেক পরীক্ষা করে না।

window["newProperty"] = customObj;

আদর্শভাবে, বৈশ্বিক পরিবর্তনশীল দৃশ্য এড়ানো উচিত। আমি এটি কখনও কখনও ব্রাউজার কনসোলে কোনও বস্তুর ডিবাগ করতে ব্যবহার করি।



8

আপনি যদি টাইপস্ক্রিপ্ট ৩.x ব্যবহার করে থাকেন তবে আপনি declare globalঅন্যান্য উত্তরের অংশটি বাদ দিতে পারেন এবং পরিবর্তে কেবল ব্যবহার করতে পারেন:

interface Window {
  someValue: string
  another: boolean
}

টাইপস্ক্রিপ্ট ৩.৩, ওয়েবপ্যাক এবং টিএসলিন্ট ব্যবহার করার সময় এটি আমার সাথে কাজ করেছিল।


কাজ করে না ^3.4.3। এই উত্তরটি আমার জন্য কাজ করেছে stackoverflow.com/a/42841166/1114926
সবুজ

7

রেফারেন্সের জন্য (এটি সঠিক উত্তর):

একটি .d.tsসংজ্ঞা ফাইলের ভিতরে

type MyGlobalFunctionType = (name: string) => void

আপনি যদি ব্রাউজারে কাজ করেন, আপনি উইন্ডোর ইন্টারফেসটি আবার খোলে ব্রাউজারের উইন্ডো প্রসঙ্গে সদস্যদের যুক্ত করবেন:

interface Window {
  myGlobalFunction: MyGlobalFunctionType
}

নোডজেএসের জন্য একই ধারণা:

declare module NodeJS {
  interface Global {
    myGlobalFunction: MyGlobalFunctionType
  }
}

এখন আপনি রুট ভেরিয়েবলটি ঘোষণা করুন (এটি আসলে উইন্ডোতে বা বিশ্বব্যাপী লাইভ করবে)

declare const myGlobalFunction: MyGlobalFunctionType;

তারপরে একটি নিয়মিত .tsফাইলে, তবে পার্শ্ব-প্রতিক্রিয়া হিসাবে আমদানি করা, আপনি আসলে এটি বাস্তবায়ন করেন:

global/* or window */.myGlobalFunction = function (name: string) {
  console.log("Hey !", name);
};

এবং শেষ পর্যন্ত কোডবেজে অন্য কোথাও এটি ব্যবহার করুন:

global/* or window */.myGlobalFunction("Kevin");

myGlobalFunction("Kevin");

ধন্যবাদ, এটি আমার পাওয়া সেরা উদাহরণ এবং ভালভাবে কাজ করা।
নিক জি।

6

একটি কাস্টম ইন্টারফেস উইন্ডো প্রসারিত করুন এবং yourচ্ছিক হিসাবে আপনার কাস্টম সম্পত্তি যুক্ত করুন।

তারপরে, কাস্টম উইন্ডোতে কাস্টম ইন্টারফেসটি ব্যবহার করা যাক তবে মূল উইন্ডোটির সাথে মূল্যবান।

এটি টাইপ স্ক্রিপ্ট @ ৩.৩.৩ নিয়ে কাজ করেছে।

interface ICustomWindow extends Window {
  MyNamespace?: any
}

const customWindow:ICustomWindow = window;

customWindow.MyNamespace = customWindow.MyNamespace {} 

5

যারা এই windowবস্তুটিতে একটি গণিত বা গতিশীল সম্পত্তি সেট করতে চান তাদের জন্য আপনি declare globalপদ্ধতিটির মাধ্যমে এটি সম্ভব না তা খুঁজে পাবেন । এই ব্যবহারের ক্ষেত্রে স্পষ্ট করা

window[DynamicObject.key] // Element implicitly has an 'any' type because type Window has no index signature

আপনি এরকম কিছু করার চেষ্টা করতে পারেন

declare global {
  interface Window {
    [DyanmicObject.key]: string; // error RIP
  }
}

যদিও উপরেরটি ত্রুটি করবে। এটি কারণ টাইপস্ক্রিপ্ট, ইন্টারফেস গণিত বৈশিষ্ট্য সঙ্গে ভাল খেলতে না এবং একটি ত্রুটি মত নিক্ষেপ করবে

A computed property name in an interface must directly refer to a built-in symbol

এটি পেতে, আপনি কাস্টিংয়ের পরামর্শটি দিয়ে যেতে windowপারেন <any>যাতে আপনি এটি করতে পারেন

(window as any)[DynamicObject.key]

3
এটি তাই 2019.
কিওয়ার্টি

4

তৈরি-প্রতিক্রিয়া-অ্যাপ্লিকেশন v3.3 ব্যবহার করে আমি এটি অর্জনের সবচেয়ে সহজ উপায়টি খুঁজে পেয়েছি Windowস্বয়ংক্রিয়ভাবে উত্পাদিত ধরণের প্রসারিত করা react-app-env.d.ts:

interface Window {
    MyNamespace: any;
}

3

প্রথমে আপনাকে বর্তমান স্কোপে উইন্ডো অবজেক্টটি ঘোষণা করতে হবে।
কারণ টাইপস্ক্রিপ্ট অবজেক্টের ধরণটি জানতে চাইবে।
উইন্ডো অবজেক্ট যেহেতু অন্য কোথাও সংজ্ঞায়িত হয়েছে আপনি এটিকে নতুন করে সংজ্ঞা দিতে পারবেন না।
তবে আপনি এটি নিম্নলিখিত হিসাবে ঘোষণা করতে পারেন: -

declare var window: any;

এটি উইন্ডো অবজেক্টটিকে নতুন করে সংজ্ঞায়িত করবে না বা এটি নামের সাথে অন্য কোনও পরিবর্তনশীল তৈরি করবে না window
এর অর্থ উইন্ডো অন্য কোথাও সংজ্ঞায়িত হয়েছে এবং আপনি কেবল বর্তমান স্কোপে এটি উল্লেখ করছেন।

তারপরে আপনি কেবল নিজের মাইনেমস্পেস অবজেক্টটি উল্লেখ করতে পারেন: -

window.MyNamespace

অথবা আপনি windowকেবল নতুন জিনিস সম্পত্তিতে সেট করতে পারেন : -

window.MyNamespace = MyObject

এবং এখন টাইপ স্ক্রিপ্ট অভিযোগ করবে না।


আপনি কি আপনার ব্যবহারের ক্ষেত্রে জানতে চান যেখানে windowসংজ্ঞায়িত হয়েছে?
মাভা 55

2

আমি আজ এটি একটি কৌণিক (6) গ্রন্থাগারে ব্যবহার করতে চেয়েছিলাম এবং এটি প্রত্যাশার সাথে কাজ করতে আমার কিছুটা সময় নিয়েছে।

আমার গ্রন্থাগারটিকে ঘোষণাপত্র ব্যবহার করার জন্য আমাকে d.tsসেই ফাইলের জন্য এক্সটেনশন ব্যবহার করতে হয়েছিল যা বিশ্বব্যাপী অবজেক্টের নতুন বৈশিষ্ট্য ঘোষণা করে।

সুতরাং শেষ পর্যন্ত, ফাইলটি এমন কিছু দিয়ে শেষ হয়েছিল:

/path-to-angular-workspace/angular-workspace/projects/angular-library/src/globals.d.ts

একবার তৈরি হয়ে গেলে এটি নিজের মধ্যে প্রকাশ করতে ভুলবেন না public_api.ts

এটা আমার জন্য এটা। আশাকরি এটা সাহায্য করবে.

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.