에 속성을 명시 적으로 설정하여 객체의 전역 네임 스페이스를 설정합니다 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