React μ ν μ μ νμΌμ΄ μμ΅λλ€ (μΈλΆ λͺ¨λμ μ¬μ©νμ¬ μ μΈ λ¨). λ΄ μμ€ νμΌμμ λλ μΌλ°μ μΌλ‘ λ€μμ μνν©λλ€.
import * as R from "react"
κ·Έλ° λ€μ κ°λ ₯ν νμμΌλ‘ R.createElement(...
λ±μ μ¦κ²κ² μ¬μ©ν μ μμ΅λλ€. λλ μ¬μ§μ΄ ν μμλ€ :
let _r = R;
_r.createElement(...
λ΄κ° μνλ κ²μ λͺ¨λ νμΌμμ Rμ κ°μ Έ μ€μ§ μκ³ λμ μ μ μ μΈμΌλ‘ μ¬μ©νλ κ²μ
λλ€ (μ, λͺ κ°μ§ λ³μλ‘ μ μ λ€μ μ€νμ΄μ€λ₯Ό μ€μΌμν¬ κ²μ
λλ€). .d.ts
μμ μλνμ΅λλ€.
import * as React from "react";
declare var R : React;
κ·Έλλ μλνμ§ μμ΅λλ€. "React μ΄λ¦μ μ°Ύμ μ μμ΅λλ€."λΌλ λ©μμ§κ° νμλ©λλ€. κΈ°λ³Έ react.d.tsλ₯Ό μμ νμ§ μκ³ μ 체 λͺ¨λμ μ μμΌλ‘ λ΄λ³΄λ΄λ λ λ€λ₯Έ λ°©λ²μ΄ μμ΅λκΉ?
import
μ μΈμ μμ€ νμΌμ μΆκ°νλ μκ° μΈλΆ λͺ¨λλ‘ κ°μ£ΌλκΈ° λλ¬Έμμ΄ μμ
μ μν ν μ μμ΅λλ€. μ μμ μ¬μ©νλ React μ μ νμΌμ μ¬μ©νμ§ μλ μ΄μ λ 무μμ
λκΉ?
https://github.com/borisyankov/DefinitelyTyped/blob/master/react/react-global.d.ts
μ΄κ²μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν κ² κ°μ΅λλ€.
λλ μ€μ λ‘ react-global.d.ts
λ μλνλλ°, λΆλͺ
ν μ μ 곡κ°μ React
λ₯Ό λ£μμ§λ§ μ΄λ»κ² μ μ μ μΌλ‘ μ΄λ¦μ λ°κΎΈκ³ Typescriptμ μ릴 μ μμκΉμ?
declare var _r = React; // error Cannot find name 'React';
λ΄ μ€μ μ¬μ© μ¬λ‘λ μ νΈλ¦¬ν° / κ³΅ν΅ μ ν λͺ¨λμ μ μ 곡κ°μΌλ‘ λμ΄ μ¬λ¦΄ μ μμΌλ―λ‘μ΄λ₯Ό μ»κΈ° μν΄ λ§μ μλ κ²½λ‘ κ°μ Έ μ€κΈ°λ₯Ό μ¬μ©ν νμκ° μμ΅λλ€. Javascriptμμμ΄ μμ μ μν ν μ μμ§λ§ Typescript μ»΄νμΌλ¬κ° λ΄κ° μννμμ μ리λ λ°©λ²μ λν΄ κ³ μ¬νκ³ μμ΅λλ€.
@ahejlsberg- λλ λΉμ μ΄ μ£μ§ μΌμ΄μ€μ λν λ΄ μκ°μ
μλ₯Ό λ€μ΄ r.d.ts
μ μΈ νμΌμ λ§λ€ μ μμ΅λλ€.
/// <reference path="react-global.d.ts"/>
declare var R: typeof React;
λͺ¨λ κ³³μμ ν΄λΉ νμΌμ μ°Έμ‘°ν©λλ€. λλ λ λμ :
/// <reference path="react-global.d.ts"/>
import R = React;
κ·Έλ¬λ©΄ Reactμ μ νμ R.xxxλ‘ μ°Έμ‘° ν μ μμ΅λλ€.
λλ μ μ typeof
μ μ¬μ©μ λ³Έ μ μ΄ μλ€-κ½€ λ©μ§λ€. μ΄κ²μ .d.ts
μμ μ΄λ―Έ μ μ λ λͺ¨λμ λν΄ νλ₯νκ² μλνμ§λ§ Typescriptμ μ μ λ μΈλΆ λͺ¨λμ μ μ 곡κ°μΌλ‘ λμ΄ μ¬λ € Typescriptμ λν΄ μ μμλ λ°©λ²μ μμ§ λ³΄μ΄μ§ μμ΅λλ€. μν° ν¨ν΄μ΄λΌμ κ·Έλ₯ λμ΄ κ°μΌ ν κΉ ...
μΈλΆ λͺ¨λμ μ§μνκΈ° μν΄ typeof
λ₯Ό νμ₯ ν΄ λ¬λΌλ λͺ κ°μ§ μμ² (μ : # 2357)μ΄ μμμ§λ§ μ§κΈκΉμ§μ΄ κΈ°λ₯μ λν μμλ λ§μ§ μμμ΅λλ€.
μΌλ°μ μΌλ‘ νλ‘κ·Έλ¨μ μΈλΆ λͺ¨λμμ΄ μμ±λκ±°λ μΈλΆ λͺ¨λλ‘λ§ μμ±λ©λλ€. AMD λΈλΌμ°μ μ±μ λΆνΈ μ€νΈλ© λΆλΆ μΈμλ νΌν© λͺ¨λΈμ΄ κ°λ₯ν μ€ν νκ²½μ΄ μ€μ λ‘ μμ΅λλ€. λ€, λλΆλΆμ μν° ν¨ν΄μ λλ€.
μ λ¨Έλ¬μ€νκ² μκ°μ λ΄ μ£Όμ μ κ°μ¬ν©λλ€! μ λ (곧 μΆμ λ Angular2 λ° Aurelia νλ μ μν¬λ₯Ό μ¬μ©νκΈ° μν΄) μΈλΆ λͺ¨λμ νμνκΈ° μμνμ΅λλ€. # 17, # 2338 λ° # 2839μ κ°μ λ¬Έμ λ κ²°κ΅ λ΄κ° μ°Ύκ³ μλ κ²λ³΄λ€ λ λ§μ κ² κ°μ΅λλ€. νμ¬ νλ‘μ νΈμ λν΄ λ κΉμ΄ νκ³ λ€λ©΄μ λ λͺ νν νΌλλ°±μ μ»μ μ μκΈ°λ₯Ό λ°λλλ€.
μ¬μ ν ν μ μμ΅λκΉ? μ λ VueJSμ ν¨κ» TypeScriptλ₯Ό μ¬μ©νλ €κ³ νλλ° λͺ κ°μ§λ₯Ό μ μ λ€μ μ€νμ΄μ€λ‘ κ°μ Έ μμ λͺ¨λ κ΅¬μ± μμκ° μ΄λ¬ν κ²λ€μ κ°μ Έμ¬ νμμμ΄ μ¬μ©ν μ μλ€λ©΄ λλ¨ν κ°μ¬νκ² μ΅λλ€. μ΄ μμ μ μννκΈ° μν΄ μ΄λ€ μ§μ μ΄λ ν΄νΉμ΄ μμμ΅λκΉ?
μλ²νΈ
λλ λΆλͺ
ν typescript 2.xxμμ μλνλ λ°©λ²μ μ°Ύμμ΅λλ€. μ κ²½μ°μλ λΌμ΄λΈλ¬λ¦¬ ramdaλ₯Ό μ μ R
λ‘ λ
ΈμΆνκ³ μΆμ΅λλ€.
npm install ramda @types/ramda
typings/ramda.d.ts
νμΌ μμ±typings
ν΄λλ₯Ό .tsconfig.jsonμ ν¬ν¨μ μΆκ°ν©λλ€."include": [
"typings/**/*",
...
]
typings/ramda.d.ts
λ§λ² μΆκ° :import * as _R from 'ramda';
export as namespace R;
export = _R;
μ΄μ λ΄ νλ‘μ νΈμ λͺ¨λ ts νμΌμ λ΄κ° λ μ΄μ κ°μ Έ μ€κΈ°λ₯Ό μννμ§ μκ³ ν΄λΉ νμΌμμ μ νμ΄ μ§μ λ μ μ R
κ° μλ€κ³ κ°μ ν©λλ€.
λ΄ types/vue.d.ts
μμ λ€μ μ½λλ₯Ό μ¬μ©νμ¬ κ·Έλ κ²νλ €κ³ ν λ @geekflyer :
import * as V from 'vue'
export as namespace Vue
export = V
μ μ Vue
μ΄λκ°μμ μ¬μ©νλ €κ³ ν λλ§λ€ λ€μ μ€λ₯κ° λ°μν©λλ€.
error TS2686: 'Vue' refers to a UMD global, but the current file is a module. Consider adding an import instead.
μ΄λ μμ μμ κ·Έ μ€λ₯κ° λ°μ νμ΅λκΉ? κ·Έλ λ€λ©΄ μ΄λ»κ² νμ΅λκΉ?
ν΄λΉ μ€λ₯κ° λ°μνμ§ μκ³ μ κ·Έ μ€λ₯κ° λ°μνλμ§ μ λͺ¨λ₯΄κ² λ€λ©΄ μ 체 tsconfig.jsonκ³Ό μΉν© ꡬμ±μ νμν΄ μ£Όμκ² μ΅λκΉ?
μλ
νμΈμ @Evertt μ€μ λ‘μ΄ μ€λ₯κ° λ°μν©λλ€. μ²μμλ μμ€ μ½λκ° ES6 λͺ¨λ ꡬ문μ μ¬μ©νμ§ μμμ§λ§ μΌλΆ νμΌμ ν΄λΉ ꡬ문μΌλ‘ 리ν©ν λ§νλ©΄ λμΌν μ€λ₯κ° λ°μνμ΅λλ€. λͺ κ°μ§ μ‘°μ¬λ₯Όνκ³ μ΄μ μ μκ² λμμ΄ λ κ²μ λ λ²μ§Έ νμΌ globals.d.ts
λ§λ€κ³ μ΄λ₯Ό νμ΄ν ν΄λμ λ£μ λμ
λλ€.
import * as _R from 'ramda';
import * as _mobx from 'mobx';
declare global {
const R: typeof _R;
const mobx: typeof _mobx;
}
μ¬μ€μ΄ νμΌλ§μΌλ‘λ νμ΄ν μ€ν¬λ¦½νΈ μ»΄νμΌλ¬λ₯Ό "λ§μ‘±"νλ κ²μ²λΌ 보μ΄λ―λ‘ μ΄λ‘ μ μ΄μ μ μΈκΈ ν λ€λ₯Έ νμΌμ νμνμ§ μμ΅λλ€. κ·Έλ¬λ λ΄ νΉλ³ν κ²½μ° (WebStormμ μ¬μ©νκ³ μμ΅λλ€) globals.d.ts νμΌ λ§ μμΌλ©΄ IDEκ° κ³μν΄μ λͺ¨λμ κ°μ Έ μ€λλ‘ ννκ³ ν΄λΉ μ μμ λν μλ£κ° λΆμμ νμ΅λλ€. κ·Έλμ λλ κΈ°λ³Έμ μΌλ‘ typescriptμ IDEλ₯Ό λ§μ‘±μν€λ typings λλ ν 리μ λ νμΌμ λͺ¨λ 보κ΄νμ΅λλ€. λ³λ‘ μ’μ§λ μμ§λ§ μΌλ°μ μΌλ‘ μ¬μ©νλ λͺ κ°μ§ μ μμ λν΄μλ ν΄λΉ νμΌμ μ μ§νλ κ²μ΄ μ’μ΅λλ€.
μ΄κ²μ λ΄ tsconfig.json
μ
λλ€.
{
"compilerOptions": {
"target": "ES5",
"module": "amd",
"moduleResolution": "node",
"experimentalDecorators": true,
"lib": [
"ES6",
"DOM",
"ScriptHost"
],
"sourceMap": true,
"strictNullChecks": true
},
"include": [
"types/**/*",
"src/**/*"
]
}
λ²λ€λ‘ webpackμ΄λ λ€λ₯Έ κ²μ μ¬μ©νμ§ μμ΅λλ€. κ°λ³ νμΌμ νΈλμ€ νμΌνκ³ https://github.com/SAP/openui5 λͺ¨λ μμ€ν (AMDμ μ μ¬)μ ν΅ν΄λ‘λνκ³ νλ‘λμ μ©μΌλ‘ λ§ λ²λ€λ‘ μ 곡ν©λλ€.
Typescript λ²μ : 2.2.1
λμμ΄λκΈ°λ₯Ό λ°λλλ€.
@geekflyer λ§€μ° λμμ΄λμμ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
μλ νμΈμ @Evertt μ€μ λ‘μ΄ μ€λ₯κ° λ°μν©λλ€. μ²μμλ μμ€ μ½λκ° ES6 λͺ¨λ ꡬ문μ μ¬μ©νμ§ μμμ§λ§ μΌλΆ νμΌμ ν΄λΉ ꡬ문μΌλ‘ 리ν©ν λ§νλ©΄ λμΌν μ€λ₯κ° λ°μνμ΅λλ€. λͺ κ°μ§ μ‘°μ¬λ₯Όνκ³ μ΄μ μ μκ² λμμ΄ λ κ²μ λ λ²μ§Έ νμΌ
globals.d.ts
λ§λ€κ³ μ΄λ₯Ό νμ΄ν ν΄λμ λ£μ λμ λλ€.μ¬μ€μ΄ νμΌλ§μΌλ‘λ νμ΄ν μ€ν¬λ¦½νΈ μ»΄νμΌλ¬λ₯Ό "λ§μ‘±"νλ κ²μ²λΌ 보μ΄λ―λ‘ μ΄λ‘ μ μ΄μ μ μΈκΈ ν λ€λ₯Έ νμΌμ νμνμ§ μμ΅λλ€. κ·Έλ¬λ λ΄ νΉλ³ν κ²½μ° (WebStormμ μ¬μ©νκ³ μμ΅λλ€) globals.d.ts νμΌ λ§ μμΌλ©΄ IDEκ° κ³μν΄μ λͺ¨λμ κ°μ Έ μ€λλ‘ ννκ³ ν΄λΉ μ μμ λν μλ£κ° λΆμμ νμ΅λλ€. κ·Έλμ λλ κΈ°λ³Έμ μΌλ‘ typescriptμ IDEλ₯Ό λ§μ‘±μν€λ typings λλ ν 리μ λ νμΌμ λͺ¨λ 보κ΄νμ΅λλ€. λ³λ‘ μ’μ§λ μμ§λ§ μΌλ°μ μΌλ‘ μ¬μ©νλ λͺ κ°μ§ μ μμ λν΄μλ ν΄λΉ νμΌμ μ μ§νλ κ²μ΄ μ’μ΅λλ€.
μ΄κ²μ λ΄
tsconfig.json
μ λλ€.λ²λ€λ‘ webpackμ΄λ λ€λ₯Έ κ²μ μ¬μ©νμ§ μμ΅λλ€. κ°λ³ νμΌμ νΈλμ€ νμΌνκ³ https://github.com/SAP/openui5 λͺ¨λ μμ€ν (AMDμ μ μ¬)μ ν΅ν΄λ‘λνκ³ νλ‘λμ μ©μΌλ‘ λ§ λ²λ€λ‘ μ 곡ν©λλ€.
Typescript λ²μ : 2.2.1
λμμ΄λκΈ°λ₯Ό λ°λλλ€.