TypeScript의'window'에 새 속성을 명시적으로 설정하는 방법은 무엇입니까?

3344 단어
How do you explicitly set a new property on'window'in TypeScript?
I setup global namespaces for my objects by explicitly setting a property on window . 나는 window에서 현식 설정 속성을 통해 대상에게 전역 명칭 공간을 설정한다.
window.MyNamespace = window.MyNamespace || {};

TypeScript underlines MyNamespace and complains that: TypeScript는 MyNamespace을 강조하며 불평합니다.
The property'My Namespace'does not exist on value of type'window'any'속성'My Namespace'는'window'형식의 값에 존재하지 않습니다. '
I can make the code work by declaring MyNamespace as an ambient variable and dropping the window explicitness but I don't want to do that. 나는 MyNamespace을 환경 변수로 성명하고 window의 현식성을 삭제함으로써 코드를 정상적으로 작동시킬 수 있지만, 나는 이렇게 하고 싶지 않다.
declare var MyNamespace: any;

MyNamespace = MyNamespace || {};

How can I keep window in there and make TypeScript happy? window을 보관하고 TypeScript를 만족하는 방법은 무엇입니까?
As a side note I find it especially funny that TypeScript complains since it tells me that window is of type any which by definitely can contain anything. 덧붙인 설명으로 나는 TypeScript의 불평이 매우 재미있다는 것을 발견했다. 왜냐하면 그것은 나에게 windowany유형이고 window은 틀림없이 어떤 내용을 포함할 수 있다는 것을 알려주었기 때문이다.

#1층


참조:https://stackoom.com/question/rKD4/TypeScript의 -window - 새 속성을 명시적으로 설정하는 방법

#2층


Just found the answer to this in another StackOverflow question's answer . 방금 다른 Stack Overflow 문제의 답안에서 답을 찾았습니다.
declare global {
    interface Window { MyNamespace: any; }
}

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

Basically you need to extend the existing window interface to tell it about your new property. 기본적으로 기존 window 인터페이스를 확장하여 새로운 속성을 소개해야 합니다.

#3층


AS OF TYPESCRIPT ^3.4.3 THIS SOLUTION NO LONGER WORKS 는 TYPESCRIPT ^ 3.4.3 까지 솔루션이 작동하지 않음
Or... 아니면...
you can just type: 다음을 입력할 수 있습니다.
window['MyNamespace']

and you wont get a compile error and it works the same as typing window.MyNamespace 및 컴파일 오류 없음

#4층


The accepted answer is what I used to use, but with TypeScript 0.9.* it no longer works. 받아들일 수 있는 답은 내가 사용하던 답이지만 TypeScript 0.9을 사용합니다.*시, 그것은 더 이상 작용하지 않을 것이다.The new definition of the window.MyNamespace interface seems to completely replace the built-in definition, instead of augmenting it. Window 인터페이스의 새로운 정의는 내장된 정의를 완전히 대체한 것 같지 않고 확장된 것 같다.
I have taken to doing this instead: 이렇게 하겠습니다.
interface MyWindow extends Window {
    myFunction(): void;
}

declare var window: MyWindow;

UPDATE: With TypeScript 0.9.5 the accepted answer is working again. 업데이트: TypeScript 0.9.5를 사용하여 허용 가능한 답변이 다시 작동합니다.

#5층


동적 상태를 유지하려면 다음을 사용합니다.
(window).MyNamespace

#6층


Using TSX? TSX를 사용하시겠습니까?None of the other answers were working for me. 다른 답안은 나에게 유용하지 않다.
Here's what I did: 내가 한 일:
(window as any).MyNamespace

좋은 웹페이지 즐겨찾기