// external.js
var ErrorHelper = (function () {
return {
containsErrors: function (response) {
if (!response || !response.responseText) {
return false;
}
var errorValue = response.responseText;
if (String(errorValue.failure) == "true" || Boolean(errorValue.failure)) {
return true;
}
return false;
},
trace: function (msg) {
var traceMessage = msg;
if (msg.responseText) {
traceMessage = msg.responseText.errorMessage;
}
console.log("[" + new Date().toLocaleDateString() + "] " + traceMessage);
}
}
})();
소스는 확인하기 귀찮으니 어떤 식으로 쓰는지를 알면 좋음
var failureMessage = {
responseText: {
"failure": true,
"errorMessage": "Message From failureMessage"
}
};
var failureMessageString = {
responseText: {
"failure": "true",
"errorMessage": "Message from failureMessageString"
}
};
var successMessage = {
responseText: {
"failure": false
}
};
if (ErrorHelper.containsErrors(failureMessage)) {
ErrorHelper.trace(failureMessage);
}
if (ErrorHelper.containsErrors(failureMessageString)) {
ErrorHelper.trace(failureMessageString);
}
if (!ErrorHelper.containsErrors(successMessage)) {
ErrorHelper.trace("success");
}
쓴다 TS
window.onload = () => {
var failureMessage = {
responseText: {
"failure": true,
"errorMessage": "Error Message from Typescript"
}
};
if (ErrorHelper.containsErrors(failureMessage))
ErrorHelper.trace(failureMessage);
}
에러난다. .d.ts를 만든다.
declare namespace ErrorHelper {
function containsErrors(response);
function trace(message);
}
ambient namespace/module
declare namespace ${module_name} {
// ...
}
사용하려는 자바 스크립트의 클로저 변수 이름과 같아야 함
원래 module을 namespace 개념으로 쓰다가(?) 1.5 v 부터 namespace 사용 권고, 그러나 컴파일은 됨. 1.5v 부터 module은 es6의 module 개념으로 용어 변경.
integrate with external lib
namespace
만들기라이브러리 구조를 스윽 확인
import
) 라이브러리인지?(내가 쓸) 기능은 어떤 구조 안에 있는지 ?
소스는 확인하기 귀찮으니 어떤 식으로 쓰는지를 알면 좋음
쓴다 TS
에러난다.
.d.ts
를 만든다.ambient
namespace
/module
module
을 namespace 개념으로 쓰다가(?) 1.5 v 부터namespace
사용 권고, 그러나 컴파일은 됨. 1.5v 부터 module은 es6의 module 개념으로 용어 변경.import
구문으로 쓰려면 [module
키워드를 써야 하는듯] (http://www.typescriptlang.org/docs/handbook/modules.html#working-with-other-javascript-libraries)interface
만들기위의 예제는
module
까지만 정의하면 일단 에러는 안 난다. 그러나 function의 arguments 구조도 정의해 두면 코딩하는 시점에 런타임 에러를 미리 예방할 수 있다.Union types
위에서 살펴봤듯이 response 포맷이 난장판이었다. 일단 에러가 나지 않도록 해 두고 API 담당자를 때리러 간다.
Module merging
ts 컴파일러가 찾은 .d.ts 선언 파일 중 동일한 모듈 이름이 포함되어 있으면 컴파일러가 두 선언 파일을 병합하고 모듈 선언의 결합 된 버전을 사용함.