|
1 | 1 | declare global { |
2 | 2 | interface Window { |
3 | | - daum: { |
4 | | - postcode: { |
| 3 | + daum?: { |
| 4 | + postcode?: { |
5 | 5 | load: (fn: () => void) => void; |
6 | 6 | version: string; |
7 | 7 | _validParam_: boolean; |
8 | 8 | }; |
9 | | - Postcode: { |
10 | | - new (postcodeOptions: PostcodeOptions): Postcode; |
11 | | - }; |
| 9 | + Postcode?: PostcodeConstructor; |
12 | 10 | }; |
13 | 11 | } |
14 | 12 | } |
@@ -114,27 +112,30 @@ export interface EmbedOptions { |
114 | 112 | autoClose?: boolean; |
115 | 113 | } |
116 | 114 |
|
| 115 | +export interface PostcodeConstructor { |
| 116 | + new (postcodeOptions: PostcodeOptions): Postcode; |
| 117 | +} |
| 118 | + |
117 | 119 | export interface Postcode { |
118 | 120 | open(openOptions?: OpenOptions): void; |
119 | 121 | embed(element: HTMLElement, embedOptions?: EmbedOptions): void; |
120 | 122 | } |
121 | 123 |
|
122 | 124 | const loadPostcode = (function () { |
123 | 125 | const scriptId = 'daum_postcode_script'; |
124 | | - let promise: Promise<typeof window.daum.Postcode> | null = null; |
| 126 | + let promise: Promise<PostcodeConstructor> | null = null; |
125 | 127 |
|
126 | | - return function (url: string): Promise<typeof window.daum.Postcode> { |
| 128 | + return function (url: string): Promise<PostcodeConstructor> { |
127 | 129 | if( promise ) return promise; |
128 | 130 |
|
129 | 131 | promise = new Promise((resolve, reject) => { |
130 | 132 | const script = document.createElement('script'); |
131 | 133 | script.src = url; |
132 | 134 | script.onload = () => { |
133 | | - try { |
134 | | - resolve(window.daum.Postcode); |
135 | | - } catch (e) { |
136 | | - reject(e); |
| 135 | + if( window?.daum?.Postcode ) { |
| 136 | + return resolve(window.daum.Postcode); |
137 | 137 | } |
| 138 | + reject(new Error('Script is loaded successfully, but cannot find Postcode module. Check your scriptURL property.')) |
138 | 139 | }; |
139 | 140 | script.onerror = (error) => reject(error); |
140 | 141 | script.id = scriptId; |
|
0 commit comments