getterãšsetterã«ç°ãªãã¢ã¯ã»ã¹ä¿®é£Ÿåãå®è£ ããããšã¯å¯èœã§ããããïŒ ãã®ããã«ããŠãã»ãã¿ãŒã¯ããšãã°ãã©ã€ããŒã/ä¿è·ãããã²ãã¿ãŒã¯ãããªãã¯ã«ãªããŸãã å Žåã«ãã£ãŠã¯ãå€ãèªã¿åãå°çšã§ããå Žåã«ãããéåžžã«åœ¹ç«ã¡ãŸãã
äŸïŒ
class MyClass {
private _myProp: any;
private set myProp(value: any) {
this._myProp = value;
}
public get myProp(): any {
return this._myProp;
}
}
ïŒ12ã¯ïŒ6532ã§ã¯ããŒãºãããŠããããããã®åé¡ã¯ç¯å²å€ã®ããã§ãã
ããŸããŸãªã¢ã¯ã»ã¹ä¿®é£Ÿåãå®è£
ããèšç»ã¯ãããŸããïŒ
readonly
ã¯ãããããã£ãã¯ã©ã¹å
ã§å®éã«æžã蟌ã¿å¯èœã§ããå¯èœæ§ããããããããã§èª¬æãããŠããããšã解決ããã«ã¯ååã§ã¯ãªãããã§ãã
ç§ã¯ãŸããç§ã®äŸãé¢é£ããåé¡ããããã«ç§»ãã¹ãã ãšä¿¡ããŠããŸãïŒ
declare abstract class Emitter {
new (): Emitter;
on: (name:string, handler: (arg:any) => void) => void;
off: (name:string, handler: (arg:any) => void) => void;
protected emit: (name:string, arg:any) => void;
}
class Person extends Emitter {
constructor(name:string) {
super();
this.name = name;
}
private _name:string;
get name() {
return this._name;
}
set name(value) {
if (this._name !== value) {
this._name = value;
this.emit('change:name', value);
//this way is better
this.updatedAt = new Date();
//than this way
this.setUpdatedAt(new Date());
}
}
////
private _updatedAt:Date;
get updatedAt() {
return this._updatedAt;
}
private set updatedAt(value) { //Getter and setter do not agree in visibility
//some logic and a simple readonly (our absence of a setter) is not enough
if (this._updatedAt !== value) {
this._updatedAt = value;
this.emit('change:updatedAt', value);
}
}
//// method implementation - but what's the point in it?
private setUpdatedAt(value) {
if (this._updatedAt !== value) {
this._updatedAt = value;
this.emit('change:updatedAt', value);
}
}
}
const entity = new Person('Mike');
entity.on('change:updatedAt', console.log.bind(console));
entity.name = 'Thomas';
//but manually setting updatedAt should be forbidden
entity.updatedAt = new Date(); //restricted
ããã§ãããããã£updatedAt
ã¯å®éã«ã¯ã»ãã¿ãŒãæã€ããšãã§ããŸããã Person
ã®å€éšããã¢ã¯ã»ã¹ã§ããªãããã«ããå¿
èŠããããŸãã ããã«ããã®ã»ãã¿ãŒã«ã¯è€éãªããžãã¯ãå«ãŸããŠãããåçŽãªèªã¿åãå°çšãŸãã¯ã»ãã¿ãŒããªãã ãã§ã¯äžååã§ãã
ãã©ã€ããŒãã»ãã¿ãŒã¯ãè¿œå ã®ããžãã¯ïŒæŸåºãªã©ïŒãæã€ãã©ã€ããŒãã¡ãœããã®åãªãæ§æç³è¡£ã§ããããšã«åæããŸããããã£ãŒã«ãã«é¢é£ããããžãã¯ã®äžéšãããããã£ïŒã²ãã¿ãŒïŒã«ãããå¥ã®ããžãã¯ã®äžéšãã¡ãœããïŒãã©ã€ããŒãã»ãã¿ãŒïŒã«ããå Žåã¯äžè²«æ§ããªããšæããŸãã
ãã®ããã«ãã²ãã¿ãŒ/ã»ãã¿ãŒã¯C#
ã§å®è£
ãããŸãããã®ã³ã³ãã©ã¯ãã¯å®è¡æã«å€±ãããŸãããã³ã³ãã€ã«æã«ç°ãªãå¯èŠæ§ãèš±å¯ãããšäŸ¿å©ã ãšæããŸãã
ããã§ã®æšå¥šäºé ã¯ããããªãã¯èªã¿åãå°çšã²ãã¿ãŒãšãã©ã€ããŒã/ä¿è·ããããããã³ã°ãã£ãŒã«ãã䜿çšããããšã§ãã
ã¢ã¯ã»ãµãŒã¯ãåã·ã¹ãã ã®ããããã£ãšå¯Ÿç§°çã§ãã ç§ãã¡ãè¡ãããšã¯ãã¹ãŠãã¿ã€ãã§æ瀺ãããããããã£ã§è¡šçŸå¯èœã§ããå¿ èŠããããŸãã private_set / public_getãæå¹ã«ããããã«æ°ããã¢ã¯ã»ã¹ä¿®é£Ÿåãè¿œå ãããšãèšèªãšåŠç¿æ²ç·ã®è€éããå¢ããããããåŸãããå€ã¯ãè¿œå ãããè€éããšäžèŽããŸããã
ãšã«ãããå°æ¥åã³æ€èšãããå Žåã«åããŠãããã«+1ãè¿œå ããŸã...
ãŸã èŠããã§ãã CïŒã«ã¯ããããããå€ãã®ç¶æ³ã§éåžžã«äŸ¿å©ã§ããç¹ã«ãã¯ã©ã¹ã®å€éšã§èªã¿åãããããprivate / protectedã§å éšçã«ã®ã¿èšå®ãããã©ã°ãããå Žåã«åœ¹ç«ã¡ãŸãã
ããŸã䜿ãããŠããªããšããã®ã¯ããã¿ãŒã³ã䜿ããªãã®ã§äœ¿ããªããšããè¶çªã ãšæããŸãã
ããã¯èšèªãžã®è¯ãè¿œå ã§ãïŒãããïŒã¿ã€ãã¹ã¯ãªããããã°ã©ããŒã®èŠ³ç¹ããïŒè¿œå ããè€éãã®éã¯å°ããã§ãã æŠå¿µã¯ç解ãããããã³ã³ãã€ã©ãŒã¯ãã¹ã³ãŒããåå ã§ã²ãã¿ãŒãŸãã¯ã»ãã¿ãŒã«ã¢ã¯ã»ã¹ã§ããªãçç±ã瀺åããé©åãªãšã©ãŒã¡ãã»ãŒãžãæäŸã§ããå¿ èŠããããŸãã
ç§ã¯äžèšã®ãŠãŒã¶ãŒã«åæããŸããããã¯ä»ã®ã»ãšãã©ã®èšèªã®æšæºã§ãã ããã«å¯Ÿããè°è«ã¯éèŠã§ã¯ãªããå®è£ ãåæ€èšããå¿ èŠããããŸãã
ç§ã¯å®éã«ããªããTSã§ãããè¡ãããšãã§ããªãããšã«é©ããŠããŸãã...åé¡ãžã®+1ã
ããã§åŠç¿æ²ç·ãå¢ããããšã¯ãªãã¯ãã§ã
private get x() { ... }
public set x(value) { ... }
Imoè±èªãèªãããªããããã§privateïŒprotectedïŒ/ publicãäœãæå³ããã®ãã¯èªæã§ãã ãŸããããããã¢ã¯ã»ãµãŒãå®çŸ©ããŠããå Žåãããããããããäœã®ããã«ããã®ãããã§ã«ç¥ã£ãŠããã§ãããã
远䌞ïŒãšã©ãŒã«ã€ããŠïŒãã²ãã¿ãŒãšã»ãã¿ãŒã®ã¢ã¯ã»ãµãŒã¯å¯èŠæ§ã«åæããŸããã-ãŸãïŒããã¯ãŸãã«ç§ã圌ãã«ããŠãããããããšã§ã
ããã䟿å©ãª2ã€ã®ãŠãŒã¹ã±ãŒã¹ã次ã«ç€ºããŸãã
Backbone.jsãéã.get()
ãš.set()
ã®åŒã³åºããé¿ããããã«ïŒ
class Whatever {
public get rotation(): number {
return this.get('rotation');
}
private set rotation(rotation: number) {
this.set('rotation', rotation);
}
}
ãµãã¯ã©ã¹ãå€æŽã§ããããããã£ïŒ
class ExtendMe {
public get someProperty(): string {
// some stuff
}
protected set someProperty(prop: string) {
// some stuff
}
}
TypeScriptã䜿ãå§ããŠä»¥æ¥ãç§ãæ©ãŸããŠããã®ã§ãããã絶察ã«èŠãããšæããŸãã
ç§ã¯ãã®æ©èœãèŠæ±ãã人ã ã«åæããŸãã public getïŒïŒã¡ãœãããè©ŠããŠã¿ãŸããããã»ãããšgetãå¯èŠæ§ã«ã€ããŠåæããŠããå¿ èŠãããããšã«é©ããŸããã
è€éããããšäž»åŒµããŠçãããèªãã§ããŸãã ãC ++ã®æ¹æ³ããæãåºããŠãããã次ã®ãã®ãšç°ãªãçç±ïŒ
private _myAttribute: string;
get myAttribute(): string {...}
setMyAttribute(value: string) {...}
ç§ã¯ããã®å€ãã®ãŠãŒã¹ã±ãŒã¹ãèŠãããšãã§ããŸãããããç§ãä»ããã«ããçç±ã§ãã
myAttributeããããªãã¯ã«ã¢ã¯ã»ã¹å¯èœã«ããããããã®ã¯ã©ã¹å
ã§ã®ã¿å€æŽã§ããããã«ããã«ã¯ã©ãããã°ããã§ããïŒ
å±æ§ãå€æŽããããã³ã«ã«ã¹ã¿ã ããžãã¯ãè¿œå ãããå Žåã¯ã©ããªããŸããïŒ
ããã¯ããžãã¹ã«ãŒã«ã§ããå Žåãããã°ããããã°ç®çãªã©ã®ãã¬ãŒã¯ãã€ã³ãæ¡ä»¶ãšãšãã«ãç¹å®ã®å€ãå²ãåœãŠãããŠããçç±ãç解ããããã®åãªããã°ã§ããå ŽåããããŸãã
åºæ¬çã«ãã¡ãœãããåŒã³åºãã®ã§ã¯ãªããå€ãå²ãåœãŠãŠããããã«èŠããæ§æã·ã¥ã¬ãŒãšäžç·ã«å±æ§ãå€æŽãããã³ã«ãã¡ãœããã䜿çšããå¿
èŠããããŸãã
CïŒã«ã¯ãã®ããã®ããããã£ã®æŠå¿µããããTSã¯ãã®æŠå¿µãç¶æ¿ããŠãããšæããŸããããç°ãªãã¢ã¯ã»ã·ããªãã£ãèš±å¯ããªãããšã¯ãç§ã®ããã«èããŠãC ++ã¹ã¿ã€ã«ãã«ãã©ãŒã«ããã¯ããã人ã
ã«ãšã£ãŠå€§ããªå¶éã§ãã
ãé£ããããããšããããšã¯ãä¿¡ããããªãã»ã©äŸ¿å©ãªæ©èœãå®è£ ããªãçç±ã«ã¯ãªããŸããã
ç§ã®+1ãè¿œå ããŸãã éåžžã«å€ãã®ç¹ã§å®å šã«ãããè¡ãããšãã§ããªãèšèªã§ã¯ãç§ã«ã¯éåžžã«å¥åŠã«æããŸãã
ãã®åé¡ãã¯ããŒãºãšããŠããŒã¯ãããŠããããšã«é©ããã ãã®æ©èœã¯ã³ãã¥ããã£ã«ãã£ãŠæãŸããŠããŸãã åéããŠãã ããã
+1
ç§èŠããã¯çŽ æŽãããæ©èœã§ãããç§ãç解ããŠããéãã§ã¯ããç§ã¯æ¯å_propertyãæžããããªãã®ã§ã¯ãªãããã©ã€ããŒãã»ããããããã£ã䜿çšãããããšããç¶æ³ã«ãããŸããã
TypeScriptã³ã¢ã³ãŒãèªäœã«éåžžã«è€éãªãã®ãè¿œå ããïŒèŠããŠãããŠãã ãã-äžå¿ èŠãªè€éã-éçºã®é床ãé ããªãããããã°ããã¹ãã®èšè¿°ã«ãããæéãé·ããªããŸã-æçµçã«ã¯ãªãªãŒã¹ã®é »åºŠãå°ãªããªããŸãïŒãã1ã€ã®ã·ã³ãã«ã®æžã蟌ã¿ãŸãã¯æžã蟌ã¿ãæžãããšããéžæè¢ãããå Žåãã®1ã€ã®ã·ã³ãã«ãšãããããŸãåŠçããŸã...ç§ã¯ãããæ¯åããäžåºŠ1ã€ã®ã·ã³ãã«ãæžãããã§ãã çµå±ãç§ã¯TSã³ã¢ã®è²¢ç®è ã§ã¯ãªãããã®ç ç³ã®è€éãã®å¯èœæ§ã«å¯ŸåŠããããããŸããã
ããã¯å€§ããããšã§ã¯ãããŸããã ãŸãããªã¯ãšã¹ããå®è£ ããã«ã¯è€éããããšå€æããã«ã¯åæ°ãšç¥æµãå¿ èŠã§ãïŒçµæãšããŠã³ãŒãå šäœã®è€éããå¢ããŸãïŒããã®ãããTypeScriptãéçºããŠããçããã«æ¬æãè¡šããäœæ¥ã«æè¬ããŸãã
ïŒpsã¯ããªãããããªãã®ããåŠã¶ããã«ããã«æ¥ãŸãã-çµå±ãç§ã®èããå€ããŠãããã«å¯ŸåŠããŸãã_property=..ã
ãããŠãŸã 幞ãã«ãªããŸãïŒ
@idchlife set
ããããã£ã®ç®æšã¯ãå€ãå²ãåœãŠããšãã«éçºè
ã«1ã€ã®ã¢ã³ããŒã¹ã³ã¢ãä¿åããããšã§ã¯ãããŸããã set
ããã»ã¹ã«ããžãã¯ãè¿œå ããããšãã§ããŸãã
ãã®å·ãå床éããŠãã ããã ããã¯æããã«éåžžã«æãŸããæ©èœã§ãã
+1ãããåèãããã®ãèŠããã§ãã
éåžžã«å¥åŠãªããšã«ãä»ã®å€ãã®èšèªããã§ã«ãããè¡ã£ãŠããå Žåãããªãã®è«ççæ ¹æ ã¯ãããã¯ç©äºãæ··ä¹±ãããã§ããããã§ãã
ãã¹ãŠã®ðã¯ããŸãæ©èœããŠããªãã®ã§ããã1ã€ðã³ã¡ã³ããä»ããŠã¹ãã ãéä¿¡ããŸãã
ããã¯ãç©äºãããèªã¿ããããè¿ éã«å®è£ ããã®ã«åœ¹ç«ã€æ§æç³è¡£ã§ãã å€ãã®èšèªã«ã¯ãTypescriptãå«ãæ§æç³è¡£æ§æããããŸãã ãããããªããšããæ¬åœã®æ£åœãªçç±ã¯ãªãããã§ãããè€éãããããšã¯æ±ºããŠäœããããªãæ£åœãªçç±ã§ã¯ãããŸãããããã¯æ æ°ãªèŠå®ã®ãããªãã®ã§ãã è€éãããåé¡ã解決ããããšã¯ãã»ãšãã©ã®äººããœãããŠã§ã¢ãšã³ãžãã¢ãªã³ã°ã«æ¹ãããçç±ã®1ã€ã§ãã ãããã£ãŠããã®è€éãªåé¡ãåãäžããŠãããã»ã©è€éã§ã¯ãªãæ¹æ³ã§è§£æ±ºããŠãã ããã ãªãã¡ã¯ã¿ãªã³ã°ãšãªã¹ã¯ã®é«ãå€æŽãå¿ èŠã§ããïŒ ãã¶ãããããããã¯ç©äºãæãéããããæ¹æ³ã§ãã
ããã§ãæãŸããã ä»ã®èšèªã¯ãget-ããã³set-æ©èœã®ç°ãªãå¯èŠæ§ããµããŒãããã®ã«åé¡ã¯ãããŸããã 䟮蟱ã«è² å·ãå ããããã«ãTypescriptã¯CïŒãšåãããã«Microsoftã«ãã£ãŠäœæãããŠããŸãããCïŒã¯ãããå®å šã«ãµããŒãããŠããŸãã
public string myPropertyWithLimitedAccess { get; private set; }
ããèŠãŠãã çŸããèªã¿ããããè€éãªããšã¯ãŸã£ãããããŸããã
ãµããŒãããªãçç±ã¯ã»ãšãã©ãããŸããã
private _myProperty: string;
public get myProperty(): string { return this._myProperty; }
private set myProperty(value: string) { this._myProperty = value; }
Typescriptã¯ãäž»ã«.NETéçºè ããã©ãŠã¶ã®ããã³ããšã³ãã§ã®äœæ¥ã«æ £ããããã«äœæããããããå¥åŠãªèšèšäžã®æ±ºå®ã«ããŒãã¹ãã€ã³ãããããŸãã
+1
Typescriptã¯ééããªããã®æ©èœã®æ©æµãåããã§ãããïŒ
TypeScriptã¯CïŒã®åŸã§ãçŽ æŽãããã§ããããã®ç¡æå³ãªå¶éã¯ç§ãããªãé »ç¹ã«èç«ãããŸãã å床éããŠãã ããã
èšèªã®è€éããå¢ãã ãã
readonly [P in keyof T]: T[P]
ã®ãããªãã®ãšæ¯èŒããŠãããã¯æ¬åœã«ãã®è€éãªãã®ã§ããïŒ
ãã³ãã 誰ãããã®æ©èœãæãã§ããŸãã TypesScriptã³ãã¥ããã£ã決å®ããã¹ãã§ã¯ãããŸãããïŒ
èšèªã®è€éããå¢ãã ãã
readonly [P in keyof T]: T[P]
ãããªãã®ãšæ¯èŒããŠãããã¯æ¬åœã«ãã®è€éãªãã®ã§ããïŒ
è€éãã¯ãä»ã®èšèªæ©èœã®çžäºäœçšã«é¢ä¿ããŠããŸãã æ®å¿µãªããç§ã¯ãããèŠã€ããããšãã§ããŸããããIIRC RyanCavanaughã¯ããã®æ©èœã䜿çšããŠãã¯ã©ã¹åŒã䜿çšããç¶æ¿ãä»ããŠäžå€æ¡ä»¶ãèšå®ããéåããããšãã§ããäŸã瀺ããŸããã ç¹å®ã®å®£èšãæžãã®ãç°¡åã ãããšãã£ãŠããããç©äºã«ã©ã®ããã«åœ±é¿ããããåžžã«ç°¡åã«æšè«ã§ããããã§ã¯ãããŸããã
åé¡ã¯ãç¹å®ã®æ©èœãã©ã®åé¡ã解決ããã©ã®åé¡ãäœæãããã§ãã åè ã¯çããã®ãç°¡åã§ããåŸè ã¯é©ãã»ã©çããã®ãé£ãããããããŸããã æ®å¿µãªãããTSããŒã ã¯ãåé¡ã説æããã®ã§ã¯ãªãããOMGã®è€éããã§å¿çããããã«èŠããããšããããŸãã ïŒå ¬å¹³ãæãããã«ãnåç®ã®ã¯ãšãªxãžã®åçã«è²»ããæéãé·ãã»ã©ãéçºã«å¿ èŠãªæéã¯å°ãªããªããŸããïŒ
å®éã«èšèªãéçºããŠããå°é家ã®éã§ã³ã³ã»ã³ãµã¹ãããã°ãããã¯ããªãã«äœããæããŠãããã¯ããªã®ã§ãç§ã¯ãã³ãã¥ããã£ã決å®ããã¹ãã§ã¯ãªãããšããæŠå¿µã«100ïŒ åæããŸããã ããããç§ã¯ãã®ããã«èŠæ±ããããã®ã§ããã¬ãŒããªããäœã§ãããããããŠãªã圌ããããã«å察ããŠããã®ãã«ã€ããŠã®ããŒã ããã®ææ ®æ·±ã説æãæ±ããã®ã¯ããã»ã©å€ããªããšæããŸãã
ãããŠå人çã«ã¯ããã®å Žåã®ãã¬ãŒããªãã¯1000ïŒ ã®äŸ¡å€ããããšæããŸãã ãããããããããããç¹å®ããŠæ©èœãããããšãã§ããªããã°ãæå¥ãèšãæš©å©ã¯ããŸããªãã®ã§ã¯ãªãããšæããŸãã
ãã®åé¡ãåæ€èšããè¯ãæ©äŒã§ããããïŒ
readonly
修食åã¯çŽ æŽãããã§ãããã¯ã©ã¹ã®å
éšã§å€ãå€æŽããå€éšã§ãã¹ãŠãèªã¿åãå°çšã«ãããå Žåãå€ããããŸãã
ãã©ã€ããŒããããã³ã°ãã£ãŒã«ããšããããã£ãè¿œå ãããã€ãºãæ°ã«å
¥ããªããããããããã£ãreadonly
ã«ããªãããšãéžæããããšããããããŸãã
ãããè¡ãããã®æ§æç³è¡£ãããã°çŽ æŽããããšæããŸãã äœãã®ãããªãã®ïŒ
// Option 1: C# style
public name: string { get; private set; }
// Option 2: Swift style
private(set) name: string
// Option 3: Swift struct-style
public readonly name: string
mutating changeName(name: string) {
this.name = name
}
// Option 4: New keyword
public frozen name1: string
public readonly name2: string
ç§ã¯ãªãã·ã§ã³2ã奜ãã§ããããã¯TypeScriptèšèªã«ããŸãé©åããŸãã
ãªãã·ã§ã³3ã§ã¯ã mutating
ãšããŠããŒã¯ãããŠããé¢æ°ã®èªã¿åãå°çšãã£ãŒã«ãã®ã¿ãå€æŽã§ããŸãã
ãªãã·ã§ã³4ã§ã¯ã frozen
ã¯ã³ã³ã¹ãã©ã¯ã¿ãŒã§ã®ã¿èšå®ã§ãã readonly
ã¯ãã®ã¯ã©ã¹ã®å
éšã§èšå®ã§ããå€éšã¯ã©ã¹ããã®ã¯ã©ã¹ããç¶æ¿ããã¯ã©ã¹ã§ã¯èšå®ã§ããŸããã
åèãŸã§ã«ãããæè»ãªä¿®é£Ÿåã«é¢ãã@yvbeekã®ã¢ã€ãã¢ã¯ã httpsïŒ//github.com/microsoft/TypeScript/issues/37487ã§ã®è°è«ã«é©ããŠããŸãã
ãã®åé¡ã¯ç¹ã«ã²ãã¿ãŒãšã»ãã¿ãŒåãã§ãããéåžžã«å€ãã®è³æ祚ããããŸãã ã²ãã¿ãŒãšã»ãã¿ãŒã«ç°ãªãã¢ã¯ã»ã¹ä¿®é£ŸåãäžãããšäŸ¿å©ã ãšæããŸãïŒTypeScriptããŒã ãåé²ããã®ã«èš±å®¹ã§ãããã®ã§ãããšå€æããå Žåã¯ãæ¢åã®ä¿®é£Ÿåã®ã»ãããïŒ37487ã§æŽæ°ã§ããŸãïŒ
å®éã«èšèªãéçºããŠããå°é家ã®éã§ã³ã³ã»ã³ãµã¹ãããã°ãããã¯ããªãã«äœããæããŠãããã¯ããªã®ã§ãç§ã¯ãã³ãã¥ããã£ã決å®ããã¹ãã§ã¯ãªãããšããæŠå¿µã«100ïŒ åæããŸããã ããããç§ã¯ãã®ããã«èŠæ±ããããã®ã§ããã¬ãŒããªããäœã§ãããããããŠãªã圌ããããã«å察ããŠããã®ãã«ã€ããŠã®ããŒã ããã®ææ ®æ·±ã説æãæ±ããã®ã¯ããã»ã©å€ããªããšæããŸãã
@snarfblamç¡é¢ä¿ãªã³ã¡ã³ãã§ãã®ã¹ã¬ãããè©°ãŸãããªãã§ãã ããããããããªãã¯æ¿åºãéå¶ãããã¹ãæ¹æ³ã®æ žãšãªãååãæããã«ãããšæããŸãã
ãã®æ©èœããªãããšã¯ç§ã«ãšã£ãŠæ¬åœã«èŠçã§ãããïŒãšãããïŒTS / NodeJSãããã£ãš...ã¿ã€ãã»ãŒãã«åãæ¿ããããã«ãªããŸããã ããã¯ãã¹ãŠåé¡ãªããã³ãã£ã§ãããå€ãã®ããŒã¿æ§é ïŒäœåºŠãæ·±ããã¹ããããŠããïŒãå«ãè€éãªãããžã§ã¯ãã§äœæ¥ããŠããŠãããŒã¿ãé©åã«ã¢ãã«åã§ããªãå Žåãããã¯ã倧èŠæš¡ãªèšèªãã§ã¯ãªããšæããŸããç·ã®åãã
ç§ã®ç¹å®ã®ã±ãŒã¹ã§ã¯ãããããã£ãèªã¿åãå°çšã«ãããã®ã§ãããå éšããå€æŽå¯èœã§ãããJSONã«ã·ãªã¢ã«åããããšãã§ããŸãã ãžã£ã³ãããã«ã¯ããŒããå€ãããŸãã
ãã®æ©èœã¯ã_optionalchaining_ãšåããã¹ããã©ãå ŽåããããŸãã 人ã ã¯äœå¹Žãã®éãã®æ©èœãèŠæ±ãããããå®çšçã§ãããä»ã®èšèªãåãæ©èœãæäŸãããããæçµçã«ã¯èšèªã«è¿œå ãããŸãã
ãã以å€ã®å Žåã¯ãäžéšã®å®è£ ãEcmaScriptã®äžéšã«ãªããTypeScriptã«ç§»è¡ããããšãæåŸ ããŠããŸãã
ç§ã¯æè¿typescriptã«åãæ¿ããã°ããã§ããã®èšèªã倧奜ãã§ãã ä»ã®èšèªã«ååšãããã®å®çšçãªæ©èœãããã«å®è£ ãããŠããªãããšã«æ¬åœã«ããããããŠããŸãã èšèªã«ã©ãã»ã©è€éã«ãªããšæããããã«é¢ä¿ãªããå°æ¥ã®ãªãªãŒã¹ã§è¿œå ããããšãåæ€èšããŠãã ããã
ç§ã¯ãã®ããã«ã²ãã¿ãŒã§cïŒã«äŒŒãäœããéæããŸããïŒ
export class I18nService {
private static ref: I18nService;
public static get instance(): I18nService {
if (!I18nService.ref) {
I18nService.ref = new I18nService();
}
return I18nService.ref;
}
}
次ã®ãããªã¿ã€ããšã©ãŒã¯ç解ãããããè€éã§ã¯ãããŸããã
Property 'foo' is writable only in protected scope within class 'Blah' and its subclasses.
ãŸã
Property 'foo' is readable only in protected scope within class 'Blah' and its subclasses.
ãªã©ãããã³private
ãšåæ§ã§ãã
ããã¯æ£çŽèšã£ãŠè€éã§ã¯ãããŸããã
ãšããã§ãç§ããã®åé¡ã«ééããŸããããã®éããã®çš®ã®ãããã¯ãã䜿çšããŠããŸãã
// somewhere.ts
declare global {
type Writable<T> = { -readonly [P in keyof T]: T[P]; }
}
// example.ts
class Example {
public readonly prop: number;
public doSomething(n: number): void {
(this as Writable<this>).prop = n;
}
}
æè¡çã«ã¯ãããã¯ã©ãã§ã䜿çšã§ããŸããããã®åé¿çã®äœ¿çšã¯ãã¯ã©ã¹ã¡ãœããå ã®ã³ãŒãã«å¶éããå¿ èŠããããŸãã
ãšããã§ãç§ããã®åé¡ã«ééããŸããããã®éããã®çš®ã®ãããã¯ãã䜿çšããŠããŸãã
ç§ã¯ãã®ã¢ã€ãã¢ãèªåã§è©ŠããŸããããåé¡ã¯ãããããªãã¯èªã¿åãå°çšãããããã£ãšçã®èªã¿åãå°çšããããã£ãåºå¥ããæ¹æ³ããªãããšã§ãã ãã®ãããæ±çšãœãªã¥ãŒã·ã§ã³ãšããŠã¯ããŸãé©ããŠããŸããã
æãåèã«ãªãã³ã¡ã³ã
ãšã«ãããå°æ¥åã³æ€èšãããå Žåã«åããŠãããã«+1ãè¿œå ããŸã...