TypeScriptã®ã¡ã¿ããã°ã©ãã³ã°ããªãã¬ã¯ã·ã§ã³ãšã³ãŒãçææè¡ãéããŠæ¢æ±ããŸããã³ã³ãã€ã«æã«ã³ãŒããåæã»æäœãã匷åãªæœè±¡åãšéçºã¯ãŒã¯ãããŒã®åŒ·åãå®çŸããæ¹æ³ãåŠã³ãŸãã
TypeScriptã¡ã¿ããã°ã©ãã³ã°ïŒãªãã¬ã¯ã·ã§ã³ãšã³ãŒãçæ
ã¡ã¿ããã°ã©ãã³ã°ã¯ãä»ã®ã³ãŒããæäœããã³ãŒããæžãæè¡ã§ãããTypeScriptã«ãããŠãšããµã€ãã£ã³ã°ãªå¯èœæ§ãéããŸãããã®èšäºã§ã¯ããªãã¬ã¯ã·ã§ã³ãšã³ãŒãçææè¡ãçšããã¡ã¿ããã°ã©ãã³ã°ã®é åãæ·±ãæãäžããã³ã³ãã€ã«äžã«ã³ãŒããåæã»ä¿®æ£ããæ¹æ³ãæ¢ããŸãããã³ã¬ãŒã¿ãŒãTypeScript Compiler APIã®ãããªåŒ·åãªããŒã«ãæ€èšŒããå ç¢ã§æ¡åŒµæ§ãé«ããä¿å®æ§ã«åªããã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããåãã€ããŸãããã
ã¡ã¿ããã°ã©ãã³ã°ãšã¯ïŒ
ãã®æ žå¿ã«ãããŠãã¡ã¿ããã°ã©ãã³ã°ã¯ä»ã®ã³ãŒãã«å¯ŸããŠæäœãè¡ãã³ãŒããæžãããšãå«ã¿ãŸããããã«ãããã³ã³ãã€ã«æãŸãã¯å®è¡æã«ã³ãŒããåçã«çæãåæããŸãã¯å€æããããšãå¯èœã«ãªããŸããTypeScriptã§ã¯ãã¡ã¿ããã°ã©ãã³ã°ã¯äž»ã«ã³ã³ãã€ã«æã®æäœã«çŠç¹ãåœãŠãåã·ã¹ãã ãšã³ã³ãã€ã©èªäœã掻çšããŠåŒ·åãªæœè±¡åãå®çŸããŸãã
PythonãRubyã®ãããªèšèªã§èŠãããå®è¡æã¡ã¿ããã°ã©ãã³ã°ã®ã¢ãããŒããšæ¯èŒããŠãTypeScriptã®ã³ã³ãã€ã«æã¢ãããŒãã¯æ¬¡ã®ãããªå©ç¹ãæäŸããŸãïŒ
- åå®å šæ§ïŒ ãšã©ãŒãã³ã³ãã€ã«äžã«ææãããäºæãã¬å®è¡æãšã©ãŒãé²ããŸãã
- ããã©ãŒãã³ã¹ïŒ ã³ãŒãã®çæãšæäœã¯å®è¡åã«è¡ããããããæé©åãããã³ãŒãå®è¡ãå®çŸããŸãã
- Intellisenseãšèªåè£å®ïŒ ã¡ã¿ããã°ã©ãã³ã°ã®æ§æèŠçŽ ã¯TypeScriptèšèªãµãŒãã¹ã«ãã£ãŠçè§£ããããããããè¯ãéçºè ããŒã«ãµããŒããæäŸãããŸãã
TypeScriptã«ããããªãã¬ã¯ã·ã§ã³
ã¡ã¿ããã°ã©ãã³ã°ã®æèã«ããããªãã¬ã¯ã·ã§ã³ãšã¯ãããã°ã©ã ãèªèº«ã®æ§é ãæ¯ãèãã調æ»ãã倿Žããèœåã®ããšã§ããTypeScriptã§ã¯ãããã¯äž»ã«ã³ã³ãã€ã«æã«åãã¯ã©ã¹ãããããã£ãã¡ãœããã調ã¹ãããšãæããŸããTypeScriptã«ã¯Javaã.NETã®ãããªäŒçµ±çãªå®è¡æãªãã¬ã¯ã·ã§ã³ã·ã¹ãã ã¯ãããŸããããåã·ã¹ãã ãšãã³ã¬ãŒã¿ãŒã掻çšããŠåæ§ã®å¹æãåŸãããšãã§ããŸãã
ãã³ã¬ãŒã¿ãŒïŒã¡ã¿ããã°ã©ãã³ã°ã®ããã®ã¢ãããŒã·ã§ã³
ãã³ã¬ãŒã¿ãŒã¯TypeScriptã®åŒ·åãªæ©èœã§ãã¯ã©ã¹ãã¡ãœãããããããã£ããã©ã¡ãŒã¿ã«ã¢ãããŒã·ã§ã³ã远å ãããã®æ¯ãèãã倿Žããæ¹æ³ãæäŸããŸãããããã¯ã³ã³ãã€ã«æã®ã¡ã¿ããã°ã©ãã³ã°ããŒã«ãšããŠæ©èœããã«ã¹ã¿ã ããžãã¯ãã¡ã¿ããŒã¿ãã³ãŒãã«æ³šå ¥ããããšãã§ããŸãã
ãã³ã¬ãŒã¿ãŒã¯@èšå·ã®åŸã«ãã³ã¬ãŒã¿ãŒåãç¶ããŠå®£èšãããŸãããããã¯ä»¥äžã®ç®çã§äœ¿çšã§ããŸãïŒ
- ã¯ã©ã¹ãã¡ã³ããŒã«ã¡ã¿ããŒã¿ã远å ããã
- ã¯ã©ã¹å®çŸ©ã倿Žããã
- ã¡ãœãããã©ãããŸãã¯çœ®æããã
- ã¯ã©ã¹ãã¡ãœãããäžå€®ã¬ãžã¹ããªã«ç»é²ããã
äŸïŒãã®ã³ã°ãã³ã¬ãŒã¿ãŒ
ã¡ãœããåŒã³åºãããã°ã«èšé²ããç°¡åãªãã³ã¬ãŒã¿ãŒãäœæããŠã¿ãŸãããïŒ
function logMethod(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
descriptor.value = function (...args: any[]) {
console.log(`Calling method ${propertyKey} with arguments: ${JSON.stringify(args)}`);
const result = originalMethod.apply(this, args);
console.log(`Method ${propertyKey} returned: ${result}`);
return result;
};
return descriptor;
}
class MyClass {
@logMethod
add(x: number, y: number): number {
return x + y;
}
}
const myInstance = new MyClass();
myInstance.add(5, 3);
ãã®äŸã§ã¯ã@logMethodãã³ã¬ãŒã¿ãŒãaddã¡ãœãããžã®åŒã³åºããã€ã³ã¿ãŒã»ããããåŒæ°ãšæ»ãå€ããã°ã«èšé²ããŠãããå
ã®ã¡ãœãããå®è¡ããŸããããã¯ããã³ã¬ãŒã¿ãŒããã®ã³ã°ãããã©ãŒãã³ã¹ã¢ãã¿ãªã³ã°ã®ãããªæšªæçé¢å¿äºããã¯ã©ã¹ã®ã³ã¢ããžãã¯ã倿Žããããšãªã远å ããããã«ã©ã®ããã«äœ¿çšã§ãããã瀺ããŠããŸãã
ãã³ã¬ãŒã¿ãŒãã¡ã¯ããªãŒ
ãã³ã¬ãŒã¿ãŒãã¡ã¯ããªãŒã䜿çšãããšããã©ã¡ãŒã¿åããããã³ã¬ãŒã¿ãŒãäœæã§ããããæè»ã§åå©çšå¯èœã«ãªããŸãããã³ã¬ãŒã¿ãŒãã¡ã¯ããªãŒã¯ããã³ã¬ãŒã¿ãŒãè¿ã颿°ã§ãã
function logMethodWithPrefix(prefix: string) {
return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
descriptor.value = function (...args: any[]) {
console.log(`${prefix} - Calling method ${propertyKey} with arguments: ${JSON.stringify(args)}`);
const result = originalMethod.apply(this, args);
console.log(`${prefix} - Method ${propertyKey} returned: ${result}`);
return result;
};
return descriptor;
};
}
class MyClass {
@logMethodWithPrefix("DEBUG")
add(x: number, y: number): number {
return x + y;
}
}
const myInstance = new MyClass();
myInstance.add(5, 3);
ãã®äŸã§ã¯ãlogMethodWithPrefixã¯ãã¬ãã£ãã¯ã¹ãåŒæ°ãšããŠåãåããã³ã¬ãŒã¿ãŒãã¡ã¯ããªãŒã§ããè¿ããããã³ã¬ãŒã¿ãŒã¯ãæå®ããããã¬ãã£ãã¯ã¹ä»ãã§ã¡ãœããåŒã³åºãããã°ã«èšé²ããŸããããã«ãããã³ã³ããã¹ãã«åºã¥ããŠãã®ã³ã°ã®æ¯ãèããã«ã¹ã¿ãã€ãºã§ããŸãã
`reflect-metadata`ã«ããã¡ã¿ããŒã¿ãªãã¬ã¯ã·ã§ã³
reflect-metadataã©ã€ãã©ãªã¯ãã¯ã©ã¹ãã¡ãœãããããããã£ããã©ã¡ãŒã¿ã«é¢é£ä»ããããã¡ã¿ããŒã¿ãä¿åããã³ååŸããããã®æšæºçãªæ¹æ³ãæäŸããŸããããã¯ãã³ã¬ãŒã¿ãŒãè£å®ããä»»æã®ããŒã¿ãã³ãŒãã«æ·»ä»ããå®è¡æïŒãŸãã¯åå®çŸ©ãéããŠã³ã³ãã€ã«æïŒã«ã¢ã¯ã»ã¹ã§ããããã«ããŸãã
reflect-metadataã䜿çšããã«ã¯ããããã€ã³ã¹ããŒã«ããå¿
èŠããããŸãïŒ
npm install reflect-metadata --save
ãããŠãtsconfig.jsonã§emitDecoratorMetadataã³ã³ãã€ã©ãªãã·ã§ã³ãæå¹ã«ããŸãïŒ
{
"compilerOptions": {
"emitDecoratorMetadata": true
}
}
äŸïŒããããã£æ€èšŒ
ã¡ã¿ããŒã¿ã«åºã¥ããŠããããã£å€ãæ€èšŒãããã³ã¬ãŒã¿ãŒãäœæããŠã¿ãŸãããïŒ
import 'reflect-metadata';
const requiredMetadataKey = Symbol("required");
function required(target: Object, propertyKey: string | symbol, parameterIndex: number) {
let existingRequiredParameters: number[] = Reflect.getOwnMetadata(requiredMetadataKey, target, propertyKey) || [];
existingRequiredParameters.push(parameterIndex);
Reflect.defineMetadata(requiredMetadataKey, existingRequiredParameters, target, propertyKey);
}
function validate(target: any, propertyName: string, descriptor: TypedPropertyDescriptor) {
let method = descriptor.value!;
descriptor.value = function () {
let requiredParameters: number[] = Reflect.getOwnMetadata(requiredMetadataKey, target, propertyName);
if (requiredParameters) {
for (let parameterIndex of requiredParameters) {
if (arguments.length <= parameterIndex || arguments[parameterIndex] === undefined) {
throw new Error("Missing required argument.");
}
}
}
return method.apply(this, arguments);
};
}
class MyClass {
myMethod(@required param1: string, param2: number) {
console.log(param1, param2);
}
}
ãã®äŸã§ã¯ã@requiredãã³ã¬ãŒã¿ãŒããã©ã¡ãŒã¿ãå¿
é ãšããŠããŒã¯ããŸããvalidateãã³ã¬ãŒã¿ãŒã¯ã¡ãœããåŒã³åºããã€ã³ã¿ãŒã»ãããããã¹ãŠã®å¿
é ãã©ã¡ãŒã¿ãååšãããã©ããããã§ãã¯ããŸããå¿
é ãã©ã¡ãŒã¿ãæ¬ èœããŠããå Žåããšã©ãŒãã¹ããŒãããŸããããã¯ãreflect-metadataãã¡ã¿ããŒã¿ã«åºã¥ããŠæ€èšŒã«ãŒã«ã匷å¶ããããã«ã©ã®ããã«äœ¿çšã§ãããã瀺ããŠããŸãã
TypeScript Compiler APIã«ããã³ãŒãçæ
TypeScript Compiler APIã¯ãTypeScriptã³ã³ãã€ã©ãžã®ããã°ã©ã çãªã¢ã¯ã»ã¹ãæäŸããTypeScriptã³ãŒãã®åæã倿ãçæãå¯èœã«ããŸããããã«ãããã¡ã¿ããã°ã©ãã³ã°ã®åŒ·åãªå¯èœæ§ãåºãããã«ã¹ã¿ã ã³ãŒããžã§ãã¬ãŒã¿ãŒããªã³ã¿ãŒããã®ä»ã®éçºããŒã«ãæ§ç¯ã§ããŸãã
æœè±¡æ§ææšïŒASTïŒã®çè§£
Compiler APIã䜿çšããã³ãŒãçæã®åºç€ã¯ãæœè±¡æ§ææšïŒASTïŒã§ããASTã¯TypeScriptã³ãŒãã®æšæ§é 衚çŸã§ãããããªãŒã®åããŒãã¯ã¯ã©ã¹ã颿°ã倿°ãåŒãªã©ã®æ§æèŠçŽ ã衚ããŸãã
Compiler APIã¯ASTãèµ°æ»ããã³æäœãã颿°ãæäŸããã³ãŒãã®æ§é ãåæããã³å€æŽããããšãã§ããŸããASTã䜿çšããŠæ¬¡ã®ããšãã§ããŸãïŒ
- ã³ãŒãã«é¢ããæ å ±ãæœåºããïŒäŸïŒç¹å®ã®ã€ã³ã¿ãŒãã§ãŒã¹ãå®è£ ãããã¹ãŠã®ã¯ã©ã¹ãèŠã€ããïŒã
- ã³ãŒãã倿ããïŒäŸïŒããã¥ã¡ã³ããŒã·ã§ã³ã³ã¡ã³ããèªåçæããïŒã
- æ°ããã³ãŒããçæããïŒäŸïŒããŒã¿ã¢ã¯ã»ã¹ãªããžã§ã¯ãã®ãã€ã©ãŒãã¬ãŒãã³ãŒããäœæããïŒã
ã³ãŒãçæã®æé
Compiler APIã䜿çšããã³ãŒãçæã®å žåçãªã¯ãŒã¯ãããŒã¯ãæ¬¡ã®æé ãå«ã¿ãŸãïŒ
- TypeScriptã³ãŒãã®è§£æïŒ
ts.createSourceFile颿°ã䜿çšããŠãè§£æãããTypeScriptã³ãŒãã衚ãSourceFileãªããžã§ã¯ããäœæããŸãã - ASTã®èµ°æ»ïŒ
ts.visitNodeããã³ts.visitEachChild颿°ã䜿çšããŠASTãååž°çã«èµ°æ»ããé¢å¿ã®ããããŒããèŠã€ããŸãã - ASTã®å€æïŒ æ°ããASTããŒããäœæããããæ¢åã®ããŒãã倿ŽããŠãç®çã®å€æãå®è£ ããŸãã
- TypeScriptã³ãŒãã®çæïŒ
ts.createPrinter颿°ã䜿çšããŠã倿ŽãããASTããTypeScriptã³ãŒããçæããŸãã
äŸïŒããŒã¿è»¢éãªããžã§ã¯ãïŒDTOïŒã®çæ
ã¯ã©ã¹å®çŸ©ã«åºã¥ããŠããŒã¿è»¢éãªããžã§ã¯ãïŒDTOïŒã€ã³ã¿ãŒãã§ãŒã¹ãçæããç°¡åãªã³ãŒããžã§ãã¬ãŒã¿ãŒãäœæããŠã¿ãŸãããã
import * as ts from "typescript";
import * as fs from "fs";
function generateDTO(sourceFile: ts.SourceFile, className: string): string | undefined {
let interfaceName = className + "DTO";
let properties: string[] = [];
function visit(node: ts.Node) {
if (ts.isClassDeclaration(node) && node.name?.text === className) {
node.members.forEach(member => {
if (ts.isPropertyDeclaration(member) && member.name) {
let propertyName = member.name.getText(sourceFile);
let typeName = "any"; // Default type
if (member.type) {
typeName = member.type.getText(sourceFile);
}
properties.push(` ${propertyName}: ${typeName};`);
}
});
}
}
ts.visitNode(sourceFile, visit);
if (properties.length > 0) {
return `interface ${interfaceName} {\n${properties.join("\n")}\n}`;
}
return undefined;
}
// Example Usage
const fileName = "./src/my_class.ts"; // Replace with your file path
const classNameToGenerateDTO = "MyClass";
fs.readFile(fileName, (err, buffer) => {
if (err) {
console.error("Error reading file:", err);
return;
}
const sourceCode = buffer.toString();
const sourceFile = ts.createSourceFile(
fileName,
sourceCode,
ts.ScriptTarget.ES2015,
true
);
const dtoInterface = generateDTO(sourceFile, classNameToGenerateDTO);
if (dtoInterface) {
console.log(dtoInterface);
} else {
console.log(`Class ${classNameToGenerateDTO} not found or no properties to generate DTO from.`);
}
});
my_class.ts:
class MyClass {
name: string;
age: number;
isActive: boolean;
}
ãã®äŸã§ã¯ãTypeScriptãã¡ã€ã«ãèªã¿åããæå®ãããååã®ã¯ã©ã¹ãèŠã€ãããã®ããããã£ãšåãæœåºããåãããããã£ãæã€DTOã€ã³ã¿ãŒãã§ãŒã¹ãçæããŸããåºåã¯æ¬¡ã®ããã«ãªããŸãïŒ
interface MyClassDTO {
name: string;
age: number;
isActive: boolean;
}
解説ïŒ
fs.readFileã䜿çšããŠTypeScriptãã¡ã€ã«ã®ãœãŒã¹ã³ãŒããèªã¿åããŸããts.createSourceFileã䜿çšããŠãœãŒã¹ã³ãŒãããts.SourceFileãäœæããŸããããã¯è§£æãããã³ãŒãã衚ããŸããgenerateDTO颿°ã¯ASTãèµ°æ»ããŸããæå®ãããååã®ã¯ã©ã¹å®£èšãèŠã€ãã£ãå Žåããã®ã¯ã©ã¹ã®ã¡ã³ããŒãå埩åŠçããŸãã- åããããã£å®£èšã«ã€ããŠãããããã£åãšåãæœåºãã
propertiesé åã«è¿œå ããŸãã - æåŸã«ãæœåºãããããããã£ã䜿çšããŠDTOã€ã³ã¿ãŒãã§ãŒã¹ã®æååãæ§ç¯ãããããè¿ããŸãã
ã³ãŒãçæã®å®çšçãªå¿çš
Compiler APIã«ããã³ãŒãçæã«ã¯ã次ã®ãããªå€ãã®å®çšçãªå¿çšããããŸãïŒ
- ãã€ã©ãŒãã¬ãŒãã³ãŒãã®çæïŒ ããŒã¿ã¢ã¯ã»ã¹ãªããžã§ã¯ããAPIã¯ã©ã€ã¢ã³ãããã®ä»ã®å埩çãªã¿ã¹ã¯ã®ã³ãŒããèªåçæããŸãã
- ã«ã¹ã¿ã ãªã³ã¿ãŒã®äœæïŒ ASTãåæããŠæœåšçãªåé¡ãç¹å®ããã³ãŒãã£ã³ã°æšæºãšãã¹ããã©ã¯ãã£ã¹ã匷å¶ããŸãã
- ããã¥ã¡ã³ãã®çæïŒ ASTããæ å ±ãæœåºããŠAPIããã¥ã¡ã³ããçæããŸãã
- ãªãã¡ã¯ã¿ãªã³ã°ã®èªååïŒ ASTã倿ããŠã³ãŒããèªåçã«ãªãã¡ã¯ã¿ãªã³ã°ããŸãã
- ãã¡ã€ã³åºæèšèªïŒDSLïŒã®æ§ç¯ïŒ ç¹å®ã®ãã¡ã€ã³ã«åãããã«ã¹ã¿ã èšèªãäœæããããããTypeScriptã³ãŒããçæããŸãã
é«åºŠãªã¡ã¿ããã°ã©ãã³ã°æè¡
ãã³ã¬ãŒã¿ãŒãCompiler API以å€ã«ããTypeScriptã§ã®ã¡ã¿ããã°ã©ãã³ã°ã«ã¯ããã€ãã®æè¡ã䜿çšã§ããŸãïŒ
- Conditional TypesïŒæ¡ä»¶ä»ãåïŒïŒ ä»ã®åã«åºã¥ããŠåãå®çŸ©ããããã«æ¡ä»¶ä»ãåã䜿çšããæè»ã§é©å¿æ§ã®ããåå®çŸ©ãäœæã§ããŸããäŸãã°ã颿°ã®æ»ãå€ã®åãæœåºããåãäœæã§ããŸãã
- Mapped TypesïŒãããåïŒïŒ æ¢åã®åã®ããããã£ããããã³ã°ããŠå€æããããããã£ã®åãååã倿Žãããæ°ããåãäœæã§ããŸããäŸãã°ãå¥ã®åã®ãã¹ãŠã®ããããã£ãèªã¿åãå°çšã«ããåãäœæã§ããŸãã
- åæšè«ïŒ TypeScriptã®åæšè«æ©èœã掻çšããŠãã³ãŒãã«åºã¥ããŠåãèªåçã«æšè«ããæç€ºçãªå泚éã®å¿ èŠæ§ãæžãããŸãã
- Template Literal TypesïŒãã³ãã¬ãŒããªãã©ã«åïŒïŒ ãã³ãã¬ãŒããªãã©ã«åã䜿çšããŠãã³ãŒãçæãæ€èšŒã«äœ¿çšã§ããæååããŒã¹ã®åãäœæããŸããäŸãã°ãä»ã®å®æ°ã«åºã¥ããŠç¹å®ã®ããŒãçæããŸãã
ã¡ã¿ããã°ã©ãã³ã°ã®å©ç¹
ã¡ã¿ããã°ã©ãã³ã°ã¯ãTypeScriptéçºã«ãããŠããã€ãã®å©ç¹ãæäŸããŸãïŒ
- ã³ãŒãã®åå©çšæ§ã®åäžïŒ ã¢ããªã±ãŒã·ã§ã³ã®è€æ°ã®éšåã«é©çšã§ããåå©çšå¯èœãªã³ã³ããŒãã³ããæœè±¡åãäœæããŸãã
- ãã€ã©ãŒãã¬ãŒãã³ãŒãã®åæžïŒ å埩çãªã³ãŒããèªåçæããæåã§ã®ã³ãŒãã£ã³ã°éãæžãããŸãã
- ã³ãŒãã®ä¿å®æ§ã®åäžïŒ é¢å¿äºãåé¢ããã¡ã¿ããã°ã©ãã³ã°ã䜿çšããŠæšªæçé¢å¿äºãåŠçããããšã§ãã³ãŒããããã¢ãžã¥ãŒã«åããçè§£ããããããŸãã
- åå®å šæ§ã®åŒ·åïŒ ã³ã³ãã€ã«äžã«ãšã©ãŒãææããäºæãã¬å®è¡æã®æ¯ãèããé²ããŸãã
- çç£æ§ã®åäžïŒ ã¿ã¹ã¯ãèªååããéçºã¯ãŒã¯ãããŒãå¹çåããããšã§ãçç£æ§ãåäžããŸãã
ã¡ã¿ããã°ã©ãã³ã°ã®èª²é¡
ã¡ã¿ããã°ã©ãã³ã°ã¯å€§ããªå©ç¹ãæäŸããŸãããããã€ãã®èª²é¡ã䌎ããŸãïŒ
- è€éæ§ã®å¢å ïŒ ã¡ã¿ããã°ã©ãã³ã°ã¯ã³ãŒããããè€éã«ããç¹ã«ãã®æè¡ã«æ £ããŠããªãéçºè ã«ãšã£ãŠã¯çè§£ãé£ãããªãããšããããŸãã
- ãããã°ã®é£ããïŒ å®è¡ãããã³ãŒãããœãŒã¹ã³ãŒãã«çŽæ¥çŸããªãå Žåããããããã¡ã¿ããã°ã©ãã³ã°ã®ã³ãŒãã®ãããã°ã¯åŸæ¥ã®ã³ãŒãã®ãããã°ãããå°é£ã«ãªãããšããããŸãã
- ããã©ãŒãã³ã¹ã®ãªãŒããŒãããïŒ ã³ãŒãã®çæãšæäœã¯ãç¹ã«æ éã«è¡ãããªãå Žåãããã©ãŒãã³ã¹ã®ãªãŒããŒããããçºçãããå¯èœæ§ããããŸãã
- åŠç¿æ²ç·ïŒ ã¡ã¿ããã°ã©ãã³ã°æè¡ãç¿åŸããã«ã¯ãããªãã®æéãšåŽåã®æè³ãå¿ èŠã§ãã
çµè«
ãªãã¬ã¯ã·ã§ã³ãšã³ãŒãçæãéããTypeScriptã¡ã¿ããã°ã©ãã³ã°ã¯ãå ç¢ã§æ¡åŒµæ§ãé«ããä¿å®æ§ã«åªããã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®åŒ·åãªããŒã«ãæäŸããŸãããã³ã¬ãŒã¿ãŒãTypeScript Compiler APIãããã³é«åºŠãªåã·ã¹ãã ã®æ©èœã掻çšããããšã§ãã¿ã¹ã¯ãèªååãããã€ã©ãŒãã¬ãŒãã³ãŒããåæžããã³ãŒãå šäœã®å質ãåäžãããããšãã§ããŸããã¡ã¿ããã°ã©ãã³ã°ã«ã¯ããã€ãã®èª²é¡ããããŸããããããæäŸããå©ç¹ã¯ãçµéšè±å¯ãªTypeScriptéçºè ã«ãšã£ãŠäŸ¡å€ã®ããæè¡ã§ãã
ã¡ã¿ããã°ã©ãã³ã°ã®åãåãå ¥ããTypeScriptãããžã§ã¯ãã§æ°ããªå¯èœæ§ãè§£ãæŸã¡ãŸããããæäŸãããäŸãæ¢æ±ããããŸããŸãªæè¡ã詊ããã¡ã¿ããã°ã©ãã³ã°ãããè¯ããœãããŠã§ã¢ãæ§ç¯ããã®ã«ã©ã®ããã«åœ¹ç«ã€ããçºèŠããŠãã ããã