[typescript] TypeScript의`window`에서 새 속성을 어떻게 명시 적으로 설정합니까?

에 속성을 명시 적으로 설정하여 객체의 전역 네임 스페이스를 설정합니다 window.

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

TypeScript는 다음을 강조 MyNamespace하고 다음과 같이 불평합니다.

‘창 이름’유형의 값에 ‘MyNamespace’특성이 없습니다. “

MyNamespace주변 변수로 선언 하고 window명시 성을 삭제 하여 코드를 작동시킬 수 있지만 그렇게하고 싶지 않습니다.

declare var MyNamespace: any;

MyNamespace = MyNamespace || {};

어떻게 window거기에 머무르고 TypeScript를 행복하게 할 수 있습니까?

부수적으로 TypeScript는 그것이 무엇이든 포함 할 수있는 window유형 이라고 알려주기 때문에 TypeScript가 불평하는 것이 특히 재미 있다는 것을 알았습니다 any.



답변

다른 StackOverflow question ‘s answer 에서 이에 대한 답변을 찾았습니다 .

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

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

기본적으로 기존 window속성 을 확장 하여 새 속성에 대해 알려야합니다.


답변

동적으로 유지하려면 다음을 사용하십시오.

(<any>window).MyNamespace


답변

TYPESCRIPT 기준 ^ 3.4.3이 솔루션은 더 이상 작동하지 않습니다

또는…

당신은 입력 할 수 있습니다 :

window['MyNamespace']

컴파일 오류가 발생하지 않으며 입력과 동일하게 작동합니다. window.MyNamespace


답변

TSX를 사용하십니까? 다른 답변들 중 어느 것도 나를 위해 일하지 않았습니다.

내가 한 일은 다음과 같습니다.

(window as any).MyNamespace


답변

받아 들인 대답은 내가 사용했던 것이지만 TypeScript 0.9. *에서는 더 이상 작동하지 않습니다. Window인터페이스 의 새로운 정의는 기능 을 보강하는 대신 내장 정의를 완전히 대체하는 것으로 보입니다.

대신이 작업을 수행했습니다.

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

declare var window: MyWindow;

업데이트 : TypeScript 0.9.5에서 허용되는 답변이 다시 작동합니다.


답변

글로벌은 “악”입니다 :), 또한 이식성을 갖는 가장 좋은 방법은 다음과 같습니다.

먼저 인터페이스를 내 보냅니다 (예 : ./custom.window.ts)

export interface CustomWindow extends Window {
    customAttribute: any;
}

두 번째로 수입

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

CustomWindow를 사용하여 세 번째 캐스트 전역 변수 창

declare let window: CustomWindow;

이런 식으로 window 객체의 기존 속성과 함께 사용하는 경우 다른 IDE에 빨간색 선이 없으므로 결국 시도하십시오.

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

Typescript 2.4.x 이상에서 테스트되었습니다!


답변

사용해야 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-augmentation