TypeScriptã®å§ãæ¹ â åãã§ãã¯ã»ã³ã³ãã€ã«ã»å®è¡ãé ã«è©Šã
- TypeScriptããããžã§ã¯ãåäœã§å°å ¥ãã
- tsconfig.jsonã䜿ã£ãŠåãã§ãã¯ãšå€æãè¡ã
- åæšè«ã»ãªããžã§ã¯ãåã»ãŠããªã³åã詊ã
- éçãªåãšå®è¡æã®å ¥åæ€èšŒãåºå¥ãã
æåã«åããã3ã€ã®äœæ¥
åãã§ãã¯ã§é£ãéãã調ã¹ãJavaScriptãžå€æããå®è¡ç°å¢ã§åããã ãã®3段éãäžåºŠãã€è©Šãã®ãããã®å ¥éã®ç®æšã§ãã
TypeScriptã®åã¯ãAPIã®è¿ãå€ããã©ãŒã å ¥åã®å 容ãèªåçã«æ€èšŒãããã®ã§ã¯ãããŸããã倿åŸã®JavaScriptã«å泚éã¯æ®ããªããããå€ããæ¥ãå€ã¯å®è¡æã«ã確ãããŸãã
1. 空ã®ãã©ã«ãã§æºåãã
Node.jsãšnpmãçšæããæ¬¡ãå®è¡ããŸããæ¢åã®ã¢ããªã§ã¯ãªããæ°ããåŠç¿çšãã©ã«ãã䜿ã£ãŠãã ããã
mkdir ts-first
cd ts-first
npm init -y
npm install -D typescript @types/node
npx tsc --version
2026幎10æ9æ¥ã®ç¢ºèªã§ã¯TypeScript 7.0.2ã䜿çšããŠããŸããpackage-lock.json ã¯ã€ã³ã¹ããŒã«ããäŸåé¢ä¿ãèšé²ããã®ã§ãåçŸçšã«ä¿åããŸãã
ãã©ã«ãå
ã« src ãã£ã¬ã¯ããªãšã次㮠tsconfig.json ãäœããŸãã
{
"compilerOptions": {
"target": "ES2022",
"module": "NodeNext",
"moduleResolution": "NodeNext",
"lib": ["ES2022"],
"types": ["node"],
"strict": true,
"noUncheckedIndexedAccess": true,
"noEmitOnError": true,
"rootDir": "src",
"outDir": "dist"
},
"include": ["src/**/*.ts"]
}
ããã¯Node.jsåãã®èšå®äŸã§ãããã©ãŠã¶ãReactã®ã¢ããªã«ã¯ããã®ç°å¢ã«åãèšå®ã䜿ããŸããstrict ã¯å³å¯ãªæ€æ»çŸ€ãnoEmitOnError ã¯ãšã©ãŒæã®JavaScriptåºåãæ¢ããèšå®ã§ãã
2. åä»ãã®é¢æ°ãåãã
src/main.ts ãäœããŸãã
interface User {
name: string;
age: number;
}
function greet(user: User): string {
return 'ããã«ã¡ã¯ã' + user.name + 'ããïŒ';
}
const user = { name: 'ã²ãã', age: 3 };
console.log(greet(user));
// greet({ name: 'ã²ãã', age: '3' }); // æå¹ã«ãããšåãšã©ãŒ
èšå®ãã¡ã€ã«ãæå®ããŠãã§ãã¯ãã倿ããŠããå®è¡ããŸãã
npx tsc -p . --noEmit
npx tsc -p .
node dist/main.js
æåã®ã³ãã³ãã¯æ€æ»ã ããè¡ããåé¡ããªããã°éåžžã¯äœã衚瀺ããŸããã2ã€ç®ã§ dist/main.js ãã§ãã3ã€ç®ã§ãããã«ã¡ã¯ãã²ããããïŒãã衚瀺ãããŸãã
ã³ã¡ã³ãã«ãã greet(...) ã®è¡ãæå¹ã«ããŠããäžåºŠåãã§ãã¯ãããšãage ã«æååãæž¡ããé£ãéããæ€åºã§ããŸãã確èªåŸã¯ã³ã¡ã³ããžæ»ããŠãã ããã
ãã®èšå®ã䜿ãæé ã§ã¯ tsc src/main.ts ã«çœ®ãæããŸããã ãã¡ã€ã«ãçŽæ¥æž¡ãåŒã³æ¹ã¯ããããžã§ã¯ãèšå®ã䜿ãåŒã³æ¹ãšåãã§ã¯ãããŸããããšã©ãŒè¡šç€ºãèšå®ã®é©çšç¯å²ãæ··åããªããããããã§ã¯ -p . ã«çµ±äžããŸãã
3. æåãšå€±æããŠããªã³åã§åãã
次ã®ã³ãŒãã src/main.ts ã®æ«å°Ÿãžè¿œå ããåã3ã³ãã³ãã§ç¢ºèªããŸãã
type ParseResult =
| { kind: 'ok'; value: number }
| { kind: 'error'; message: string };
function parseCount(input: string): ParseResult {
const value = Number(input);
if (input.trim() === '' || !Number.isInteger(value) || value < 0) {
return { kind: 'error', message: '0以äžã®æŽæ°ãå
¥åããŠã' };
}
return { kind: 'ok', value };
}
for (const input of ['3', 'ã²ãã']) {
const result = parseCount(input);
if (result.kind === 'ok') {
console.log(result.value);
} else {
console.log(result.message);
}
}
远å éšå㯠3 ãšã0以äžã®æŽæ°ãå
¥åããŠããã衚瀺ããŸããkind ãèŠãŠåå²ãããšãæååŽã§ã¯ valueã倱æåŽã§ã¯ message ã䜿ããŸããæ°å€ã®æ€èšŒãã®ãã®ã¯ Number.isInteger ãªã©ã®å®è¡æã®åŠçãè¡ã£ãŠããŸãã
ããå°ãç¥ãããåã®äœ¿ãæ¹
| æ©èœ | 圹å²ã»æ³šæç¹ |
|---|---|
| åæšè« | åæå€ãªã©ããåãæ±ºããããã¹ãŠã«æ³šéãæžãå¿ èŠã¯ãªã |
| interface / type | ã©ã¡ãããªããžã§ã¯ãã衚ããã宣èšã®ããŒãžããŠããªã³åãªã©çšéã§äœ¿ãåãã |
| unknown | 䜿ãåã«åã確èªããå¿ èŠãããå€ |
| any | ãã®å€ã«å¯Ÿãã忀æ»ãåé¿ãããå ¥åæ€èšŒã®ä»£ããã«ã¯ãªããªã |
| ãžã§ããªã¯ã¹ | å ¥åãšåºåãªã©ãè€æ°ã®å Žæã®åã®é¢ä¿ãä¿ã€ |
ããšãã°é åã®å é ãè¿ã颿°ã¯ã空é åã®å ŽåãèããŸãã
function first<T>(items: T[]): T | undefined {
return items[0];
}
ãã©ããªé åã§ãå¿ ãTãè¿ãããšã¯ããŸãããåã詳ããæžãããšãããå®éã«èµ·ããçµæãåãžåæ ããããšã倧åã§ãã
ããããã€ãŸãããšæ¬¡ã®äžæ©
- tscãèŠã€ãããªã: ãããžã§ã¯ãå
ã§ã€ã³ã¹ããŒã«ãæžãã§ããã確èªãã
npx tscã§å®è¡ããŸãã - åãšã©ãŒãªã®ã«åãããšããã: 倿ããŒã«ã忀æ»ãããŠãããããšã©ãŒæã®åºåãæ¢ããŠãããã確èªããŸãã忀æ»ãšå€æã¯åããŠå®è¡ãããå ŽåããããŸãã
- APIã®å€ãåã¢ãµãŒã·ã§ã³ã§å€ããã®ã«å£ãã:
as Userãªã©ã¯å®ããŒã¿ã®å 容ãå€æã»æ€èšŒããŸãããå®è¡æã®æ¡ä»¶åŒãæ€èšŒã©ã€ãã©ãªãå¿ èŠã§ãã - æ¢åã®JavaScriptãç§»ããã:
allowJsãšå¿ èŠã«å¿ããŠcheckJsã䜿ããå°ããæ€æ»ç¯å²ãå¢ãããŸãããã«ãèšå®ãå€éšã©ã€ãã©ãªã®åã確èªããŸãã
æ§æã«äžå®ãããã°JavaScriptå ¥éãç»é¢ãäœããããã°Reactå ¥éãžé²ããŸãã