TypeScriptããŒãžã§ã³ïŒ 2.0.3
ã³ãŒã
interface Foo {
public static myStaticMethod(param1: any);
}
äºæ³ãããè¡åïŒ
ãšã©ãŒãªã
å®éã®åäœïŒ
ãµããŒããããŠããŸãã
ããã§äœãéæãããã§ããïŒ ã·ããªãªã«ã€ããŠè©³ãã説æããŠããã ããŸããïŒ
abstract
ã¯ã©ã¹ãããªããæ¢ããŠãããã®ã ãšæããŸãã
@mhegazy
äŸïŒ
interface JsonSerializable {
public static fromJson(obj: any);
public toJson(): string;
}
@rozzzlyãã®äŸã§ã¯ã abstract class
ã¯ç¡å¹ã§ãã
ããã¯ããªãã¯ãŒã«ã ãšæããŸãïŒ Javaã¯ãååã®ããŒãžã§ã³ã§ãã®æ©èœãè¿œå ããŸããã
@Serginho
ç§ã¯ããªãããããé¢çœããšæããããããªããšæããŸãïŒ
interface JsonSerializableStatic<C extends new (...args) => JsonSerializable<C>> {
fromJson(json: string): JsonSerializable<C>;
}
interface JsonSerializable<C extends new (...args) => any> {
toJson: () => string;
constructor: C;
}
interface A extends JsonSerializable<typeof A> { }
class A implements JsonSerializable<typeof A> {
constructor(readonly id: number, readonly name: string) { }
toJson() { return JSON.stringify(this); }
static fromJson(json: string): A {
const obj = JSON.parse(json);
return new A(obj.id, obj.name);
}
}
const a = new A(1, 'Charlize');
const json = a.toJson();
const y = A.fromJson(json);
console.info(a, json, y);
console.info(new a.constructor(1, 'Theron'));
const m = new A.prototype.constructor(1, 'Charlize Theron');
console.info(m);
@aluanhaddadããªãã®ã³ãŒãã¯æãããªäœãã®åé¿çã ãšæããŸãã
interface JsonSerializable {
public static fromJson(obj: any);
public toJson(): string;
}
ã©ã¡ããããã¯ã£ãããšèŠããŸããïŒ
@aluanhaddadããªãã®ã³ãŒãã¯æãããªäœãã®åé¿çã ãšæããŸãã
ã€ã³ã¿ãŒãã§ã€ã¹JsonSerializable {
public static fromJsonïŒobjïŒanyïŒ;
public toJsonïŒïŒïŒæåå;
}
ã©ã¡ããããã¯ã£ãããšèŠããŸããïŒ
確ãã«ããããç§ã®ãã®ã¯åé¿çã§ã¯ãããŸãããããã¯ããªãã®ãŠãŒã¹ã±ãŒã¹ã®æ£åœåã§ãã éçãªéã·ãªã¢ã«åãšã€ã³ã¹ã¿ã³ã¹ã®ã·ãªã¢ã«åãã¯ã©ã¹ããšã«å®è£
ããããã«ãã£ãŠã«ãã»ã«åããŠã¿ã€ãã»ãŒãã«ããŸãã
ããªãã®å®£èšïŒ
interface JsonSerializable {
public static fromJson(obj: any);
public toJson(): string;
}
åºæ¬çã«JSONãªããžã§ã¯ãã®ã€ã³ã¿ãŒãã§ãŒã¹ãå宣èšãããããã¯ç¡é¢ä¿ã§ãã ããã«ã¯ãéçã€ã³ã¿ãŒãã§ã€ã¹ã¡ãœããã¯ãŸã£ããå¿ èŠãããŸããã
ããªãã¯ã€ã³ã¿ãŒãã§ãŒã¹ã®æŠå¿µã倱ã£ãŠããŸãã class A implements JsonSerializable
ã䜿çšãããšãäž¡æ¹ã®ã¡ãœãããå®è£
ã§ããŸãã ããããå®éã«ã¯ç§ã«å®è£
ãããŸãïŒ
toJson: () => string;
constructor: new (...args) => JsonSerializableStatic<C>;
ããã¯æ確ãªè§£æ±ºçã§ã¯ãããŸããã
ã€ã³ã¿ãŒãã§ã€ã¹ã§éçã¡ãœãããå®çŸ©ã§ããªãããã«ããæè¡çãªçç±ã¯ãããŸããã
@Serginhoç§ã¯ç¶æ³ãçæ³çã§ãããšäž»åŒµããŠããã®ã§ã¯ãããŸããã ç§ã¯ãããè¡šçŸã§ããããšã説æããããšããŠããŸããã
@aluanhaddadããïŒ å¿ãéããŠãã ããã typescriptã¯ã€ã³ã¿ãŒãã§ã€ã¹ã§éçã¡ãœãããèš±å¯ããå¿ èŠããããšæããŸããïŒ ããã¯ååã®ããŒãžã§ã³ã®Java8ã§å®è£ ãããŠããã®ã§ããã³ã»ã³ã¹ãªè©±ã§ã¯ãªããšæããŸãã
@SerginhoTypeScriptã«ã¯ç¹ã«é©ããŠãããšã¯æããŸããã ã€ã³ã¿ãŒãã§ã€ã¹ã¯ããªããžã§ã¯ããæäŸããæ©èœãå®çŸ©ããå¿ èŠããããŸãã ãã®æ©èœã¯ããªãŒããŒã©ã€ãå¯èœã§äº€æå¯èœã§ããå¿ èŠããããŸãïŒãã®ãããã€ã³ã¿ãŒãã§ã€ã¹ã¡ãœããã¯ä»®æ³ã§ãïŒã éçã¯ãåçãªåäœ/ä»®æ³ã¡ãœãããšäžŠè¡ããæŠå¿µã§ãã ãã®2ã€ãç¹ã亀ããããšã¯ããã¶ã€ã³ã®èŠ³ç¹ããã¯æ£ããæããããŸããã
@aluanhaddadããã§ã«æžããããã«ãTypeScriptã«ã¯ãå®éã«ã¯ãããªããæããã®ãè¡šçŸããã¡ã«ããºã ããã§ã«ãããŸãã 倧ããªéãã¯ããã®å Žåãã¯ã©ã¹ããªããžã§ã¯ããšããŠæ±ããè«ççã«äžè²«ããŠããããšã§ãã ç§ã®èŠè§£ã§ã¯ãã¯ã©ã¹ã¯äžçš®ã®ããã¯/äºçŽåžæ°ã§ãããããããªããææ¡ããã¢ãããŒãã¯TypeScriptïŒããã³JavaScriptéçºïŒã«ã¯ç¹ã«é©ããŠããŸããã çŸåšæ®åããŠãããã¿ãŒã³ã¯ãå³å¯ãªã¯ã©ã¹ã§ã¯ãªããããã¯ã¿ã€ãã³ã°/ã·ã§ã€ãããã°ã©ãã³ã°ã«äŸåããŠããŸãã
ãããããããªããå¿ãéããŠãããŸããŸãªã¹ã¿ã€ã«ã®ããã°ã©ãã³ã°ãè©Šãããšãã§ããŸãã äžçã¯OOPã§å§ãŸããçµããããããŸããã é¢æ°ããã¬ãŒã³ãªããžã§ã¯ããããã³ïŒããçšåºŠïŒãããã¿ã€ãã䜿çšããããã°ã©ãã³ã°ã¯ã楜ãããããã«åªããŠããå ŽåããããŸãã ãã®ãããªã¹ã¿ã€ã«ã¯ãJavaScriptãæåã«èšèšãããç®çãšã¯ããã«äžèŽããŠããŸãã ã¡ãªã¿ã«ãJSã¯ïŒå°ãªããšãå§å¡äŒã¬ãã«ã§ã¯ïŒOOP颚ã®ãã¿ãŒã³ã«ãã£ãããšç§»è¡ããŠããããšã«åæããŸãããããã¯ãããŸããŸãªããã°ã©ãã³ã°ãã©ãã€ã ãéçºææ³ã«æ £ããŠããªã人ã ã®å€§ããªããã·ã¥ã«ãããã®ã§ãã ç§ã«ãšã£ãŠãããã¯æ·±ãæ²ãããŠãã£ããããããšã§ãã
@gcnewãèšã£ãããã«ãã€ã³ã¿ãŒãã§ãŒã¹ã¯ã¯ã©ã¹ã§ã¯ãªããåã ã®ãªããžã§ã¯ãã®åœ¢ç¶ãèšè¿°ããŸãã ãã ããã¯ã©ã¹ããªããžã§ã¯ãã§ãããããã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠã¯ã©ã¹èªäœã®åœ¢ç¶ãèšè¿°ã§ããªãçç±ã¯ãããŸããã
import assert = require("assert");
interface JsonSerializableStatic<JsonType, InstanceType extends JsonSerializable<JsonType>> {
fromJson(obj: JsonType): InstanceType;
}
interface JsonSerializable<JsonType> {
toJson(): JsonType;
}
interface PointJson { x: number; y: number; }
class Point /*static implements JsonSerializableStatic<PointJson, Point>*/ {
static fromJson(obj: PointJson): Point {
return new Point(obj.x, obj.y)
}
constructor(readonly x: number, readonly y: number) {}
toJson(): PointJson {
return { x: this.x, y: this.y };
}
}
// Hack for 'static implements'
const _: JsonSerializableStatic<PointJson, Point> = Point;
function testSerialization<JsonType, InstanceType extends JsonSerializable<JsonType>>(cls: JsonSerializableStatic<JsonType, InstanceType>, json: JsonType) {
const instance: InstanceType = cls.fromJson(json);
const outJson: JsonType = instance.toJson();
assert.deepEqual(json, outJson);
}
testSerialization(Point, { x: 1, y: 2 });
toJson
ãŸãã¯fromJson
ã®ããããã®çœ²åãæºãããªãå Žåãã³ã³ãã€ã«ãšã©ãŒãçºçããŸãã ïŒæ®å¿µãªããããšã©ãŒã¯ã¡ãœããã§ã¯ãªãconst _
ãŸããïŒ
ããããé¢é£ããŠããïŒéçã¡ãœããã®å ¥åãæ±ã£ãŠããããïŒïŒïŒ5863ã
@aluanhaddad ïŒããªãã®äŸã«ã¯ééãããããŸãïŒ JsonSerializable
ã®constructor
ã¡ã³ããŒã¯ãå®éã«ã¯constructor
ãšããã€ã³ã¹ã¿ã³ã¹ããããã£ãåç
§ããŸããããã¯ã new
åŒã³åºããããšJsonSerializableStatic
è¿ããŸãã ã€ãŸãã (new ((new X()).constructor)).fromJson({})
ãæ©èœããå¿
èŠããããšããããšã§ãã æ£åžžã«ã³ã³ãã€ã«ãããçç±ã¯ã interface A extends JsonSerializable<typeof A>
ãå®éã«ãã§ãã¯ããã«å®è£
ãæå¹ã§ãããšå®£èšããŠããããã§ãã ããšãã°ãããã¯ãšã©ãŒãªãã§ã³ã³ãã€ã«ãããŸãã
interface I { m(): void; }
interface A extends I { }
// No compile error
class A implements I { em() {} }
@Serginho JavaãŠãŒã¶ãŒã§ã¯ãããŸããããèšèªã§ã¯ã©ã¹ã®éçåŽã®ã€ã³ã¿ãŒãã§ã€ã¹ãå®çŸ©ã§ããããã«ã¯èŠããŸããïŒã€ãŸããã€ã³ã¿ãŒãã§ã€ã¹ãå®è£ ããã¯ã©ã¹ã¯ãæºæ ããããã«éçã¡ãœãããå®è£ ããå¿ èŠããããŸãïŒã Javaã䜿çšãããšãã€ã³ã¿ãŒãã§ã€ã¹ã«æ¬äœã䜿çšããŠéçã¡ãœãããå®çŸ©ã§ããŸããTypeScriptã«çžåœãããã®ã¯æ¬¡ã®ãšããã§ãã
interface I { ... }
namespace I {
export function interfaceStaticMethod() {}
}
ãžã§ããªãã¯ãã¡ã¯ããªãŒãäœæããããšããå Žåã¯ã©ããªããŸããïŒ
interface Factorizable {
static factory<U>(str: string): U
}
class Foo {
private data: string[] = []
bar<T extends Factorizable>(): T[] {
return this.data.map(T.factory);
}
}
class Bar implements Factorizable {
static factory(str: string): Bar {
// ...
}
}
// Usage
var x = new Foo();
var y: Bar[] = x.bar();
ããã§ææ¡ããŠããinterface
æ§æã«ã€ããŠã¯ããããããŸããããã䜿çšæ³ãæ§æãç§ãéæããããšããŠãããã®ã§ããããšã¯ããã£ãŠããŸãã ããã¯ç§ãSwiftã§é »ç¹ã«äœ¿çšãããã¿ãŒã³ïŒ protocols
ïŒã§ãããTypeScriptã§ã¯æ¬åœã«çŽ æŽããããšæããŸãã èšèªèšèšè
ãã³ã³ãã€ã©ã®å®è£
è
ã§ã¯ãããŸããããTypeScriptã®æå³ããæ¹åã«é©åããŠããããå®è£
ããã®ãçŸå®çãã¯ããããŸããã
ã¯ã©ã¹ã¯ã€ã³ã¿ãŒãã§ãŒã¹ãimplement
ããå¿
èŠã¯ãããŸããã ã€ã³ã¿ãŒãã§ã€ã¹ãå®çŸ©ããã ãã§ãæ§é ã¿ã€ãã®ãã§ãã¯ã«ããã䜿çšãµã€ãã§ã®åé¡ããã£ãã·ã¥ãããŸããäŸïŒ
interface Factorizable<U> {
factory(str: string): U
}
class Foo {
private data: string[] = []
bar<T>(factory: Factorizable<T>): T[] {
return this.data.map(factory.factory);
}
}
class Bar {
static factory(str: string): Bar {
// ...
}
}
// Usage
var x = new Foo();
var y = x.bar(Bar); // Bar[]
@mhegazyã¯æ¯èŒçè¯ã解決çã§ãã ãããæäŸããŠãããŠããããšãïŒ ð
ç§ã«äžå¿«æãäžãã2ã€ã®ããšããŸã ãããŸãïŒç¢ºãã«ã©ã¡ããã·ã§ãŒã¹ããããŒã§ã¯ãããŸããïŒïŒ
æã
ã¯ãŸã ããã宣èšããããšãã§ããŸããBar
æ瀺çã«å®è£
ãŸãã¯ã«æºæ Factorizable
ã
Factorizable
ã€ã³ã¿ãŒãã§ãŒã¹ãäºææ§ã®ãªãæ¹æ³ã§å€æŽãããå Žåã䜿çšæ³x.bar(Bar)
ããšã©ãŒã«ãªãå§ããããªããã®å€æŽãä¿®æ£ããã®ã¯äºå®ã§ããç§ã«ãšã£ãŠã¯ãå²ãåœãŠã®å³åŽã§y
ã®ã¿ã€ãã宣èšããããšã¯äŸç¶ãšããŠèªç¥çè² æ
ã§ãã
var y: Baz[] = x.bar(Bar)
ã æããã«ãšã©ãŒã§ãããæ§æã«ãããéçºè
ã¯2ã€ã®å Žæã§æ»ãå€ã®åãå®çŸ©ããããšã«ãããåé¡ãé床ã«å¶çŽããããšãã§ããŸããBarãFactorizableãæ瀺çã«å®è£ ãŸãã¯æºæ ããŠããããšã宣èšããããšã¯ãŸã ã§ããŸããã
é¢ä¿ããã¿ã€ãã¯2ã€ãããŸãã1ãã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ïŒã¯ã©ã¹ã®éçåŽãªã©ïŒãš2.ã€ã³ã¹ã¿ã³ã¹åŽïŒ new
åŒã³åºãããšãã«åºåããããã®ïŒã§ãã ããã2ã€ã1ã€ã®ã¿ã€ãã«æ··åããããšã¯æ£ãããããŸããã çè«çã«ã¯implements
ãšstatic implements
䜿çšã§ããŸãããå®éã«ã¯ãããã¯ãã£ãã«äœ¿çšããããimplementså¥ã¯å®éã«ã¯ããŸãè¿œå ãããŸããã ãã§ãã¯ã¯ã implements
å¥ããããã©ããã«é¢ä¿ãªãã䜿çšãµã€ãã§è¡ãããŸãã
ç§ã«ãšã£ãŠãå²ãåœãŠã®å³åŽã§yã®ã¿ã€ãã宣èšããããšã¯äŸç¶ãšããŠèªç¥çè² æ ã§ãã
2ã€ã®æå³ã¯ç°ãªããŸãã var y = x.bar(Bar)
ã x.bar(Bar)
ãšåãã¿ã€ãã®æ°ããå€æ°y
ã宣èšããŸãã ãããšããŠvar y: Bar[] = x.bar(Bar)
æ°ããå€æ°å®£èšy
ã¿ã€ãBar[]
ã®çš®é¡ããšãšæ€èšŒx.bar(Bar)
ã«å²ãåœãŠå¯èœã§ããã Bar[]
ã
ãããèšã£ãŠãããã¯ãããã¹ã¿ã€ã«ã®åé¡ã§ãã å人çã«ã¯ãå¿ èŠããªãéããå泚éãæ瀺çã«äœ¿çšããªãããšããå§ãããŸãã ã¿ã€ããã·ã¹ãã ã«æµããŸãã ãã ããã¹ã¿ã€ã«ã¬ã€ããå察ã§ããã¹ãŠã«æ瀺çãªå泚éãããã³ãŒãããŒã¹ãèŠãŠããŸããã
@mhegazyãã£ã¹ã«ãã·ã§ã³/ããŒã¹ãã¯ãã£ããããããšãã
@ andy-hansonæéãå²ããŠä¿®æ£ããŠããã ãããããšãããããŸãã ç§ã®äŸã§ã¯ãšã©ãŒãä¿®æ£ããŸããã
ãããæ©èœããè¿œå ã®é¢æ°åŒã³åºããªãã§ã³ã³ãã€ã«æã«ãšã©ãŒã衚瀺ããŸãã
interface Type<T> {
new (...args: any[]): T;
}
/* static interface declaration */
interface ComparableStatic<T> extends Type<Comparable<T>> {
compare(a: T, b: T): number;
}
/* interface declaration */
interface Comparable<T> {
compare(a: T): number;
}
/* class decorator */
function staticImplements<T>() {
return (constructor: T) => {}
}
@staticImplements<ComparableStatic<TableCell>>() /* this statement implements both normal interface & static interface */
class TableCell { /* implements Comparable<TableCell> { */ /* not required. become optional */
value: number;
compare(a: TableCell): number {
return this.value - a.value;
}
static compare(a: TableCell, b: TableCell): number {
return a.value - b.value;
}
}
è°è«ã®çµæã¯äœã§ããïŒ
ç§ã¯ããã«ééããŸããããããŠç§ãstatic interface
ã䜿ãããã§ãïŒ
interface IDb {
public static instance: () => Db,
}
ã»ãšãã©ã®äººã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°/ã¯ã©ã¹ã«ã³ã³ã¹ãã©ã¯ã¿ãŒã€ã³ã¿ãŒãã§ã€ã¹ãšã€ã³ã¹ã¿ã³ã¹ã€ã³ã¿ãŒãã§ã€ã¹ã®2ã€ã®ã€ã³ã¿ãŒãã§ã€ã¹ããã§ã«ãããšããæå³ã§ããã§ã«_static_ã€ã³ã¿ãŒãã§ã€ã¹ãããããšãå¿ããŠããŸãã
interface MyFoo {
method(): void;
}
interface MyFooConstructor {
new (): MyFoo;
prototype: MyFoo;
staticMethod(): any;
}
const MyFoo = function MyFoo() {
this.prop = '';
} as any as MyFooConstructor;
MyFoo.prototype = {
method() { console.log(this); }
}
MyFoo.staticMethod = function () { /* do something static */ }
_abstract_ã¯ã©ã¹ã䜿çšããŠããªãå Žåã¯ããã§ã«ãã¯ãŒããããŸãã
è¿ä¿¡ããŠãããŠããããšã@kitsonk ã
ããªãã®å®£èšã¯ããŸãããã¯ãã§ããããã®å Žåã«ã¯åé·ãããŸãã
ãããŠãç§ã¯_abstract_ã¯ã©ã¹ãè©ŠããŸãããã abstract
static
ããµããŒãããŠããªãããã§ãã
[ts] 'static' modifier cannot be used with 'abstract' modifier.
åé¡ïŒ14600ã§ãã@zixia
ãããæ祚ããŸãããã
ããã«ç§ã®è³ªåã®è§£æ±ºçãè¿ä¿¡ããŠããã人ã¯ããŸããïŒ http ïŒ
ã€ã³ã¿ãŒãã§ã€ã¹ã§éçã¡ã³ããŒãæå®ã§ããããã«ããããšã§åé¡å šäœã解決ããããšæããŸãããã®åé¡ãäžèŠã§ããããã«éãããã
@grantilaç§ã¯ããªãã®è³ªåã«çããŸããã ãã®å·ã§åè¿°ããããã«ãããã«èšèŒãããŠããªãèŠä»¶ããªãéããã¯ã©ã¹ããªããžã§ã¯ããšããŠæ±ãããšã§ç°¡åã«è§£æ±ºã§ããŸãã
@ Enet4質åãæŽæ°ããŸããããé床ã«åçŽåãããŠããŸããã æ®å¿µãªãããå®éã®åé¡ã¯Object.defineProperty()
ããã¯ã§ã¯ä¿®æ£ã§ããŸããã ããã¯ãšããã§ãããã¯ã§ãã make
ã€ã¥ããééããªãããã«ããã-åºæ¬çã«é©åãªéçãã§ãã¯ã
ããã¯ç§ãæ±ããŠããæ¬åœã®åé¡ã§ããTypeScriptãžã®ç§»æ€ãéå§ããŸããããçŸåšã¯JavaScriptãšããŠä¿æããŠããŸããããã¯ãä»ã®æ¹æ³ã§å¿ èŠãšãªããããªå€§éã®ã³ãŒããçŸåšæžãçŽãããšãã§ããªãããã§ãã
makeã®ã¹ãã«ãééããªãããã«ããã-åºæ¬çã«é©åãªéçãã§ãã¯ã
éçãã§ãã¯ã¯ãããŸã§ããè¡ããŸããã ããããçŸåšã®å¯äžã®æžå¿µãé©åãªããããã£ãèšå®ããŠããããšã§ããå Žåã¯ãã¡ãŒã«ãŒã¿ã€ãã«ãã£ã¹ãããããããããããã£ãèšå®ããããšã§å¯ŸåŠã§ããããã§ãã
@ Enet4ã¯å®çšçãªãœãªã¥ãŒã·ã§ã³ã§ããããããšãã åãã£ã¹ãã䜿çšããããªãã®ãããªè§£æ±ºçã¯å®éã«ã¯åå®å šã§ã¯ãªãããããã®åé¡ïŒ13462ïŒãããäžåºŠæ€èšããå¿ èŠããããšæããŸããããããã¯ã©ã¹åãå€ãšããŠäœ¿çšããç¶æ³ã解決ããå¯äžã®æ¹æ³ã§ããå Žåã¯ãåçèšèªã®æè»æ§ã®å€ãã倱ã£ãŠããŸãã
åãã£ã¹ãã䜿çšããããªãã®ãããªãœãªã¥ãŒã·ã§ã³ã¯ãå®éã«ã¯åã»ãŒãã§ã¯ãããŸããããããã¯ã©ã¹åãå€ãšããŠäœ¿çšããç¶æ³ã解決ããå¯äžã®æ¹æ³ã§ããå Žåãåçèšèªã®æè»æ§ãå€§å¹ ã«å€±ãããŸãã
@grantilaç§ã®åŒè·ã§ã¯ãããã¯è°è«ã®äœå°ããããŸãã ïŒwinkïŒãŠãŒã¹ã±ãŒã¹ã¯ãå®è¡æã®æ¡ä»¶ã«å¿ããŠã¯ã©ã¹ã¿ã€ããã¡ãœãããæäŸããïŒãŸãã¯æäŸããªãïŒãšããç¹ã§ããã®åé¡ã§æ瀺ãããŠãããã®ãšã¯ç°ãªããŸãã ãããŠããªããžã§ã¯ããžã®ãã£ãŒã«ãã®æ¿å
¥ãèš±å¯ããããã«ã®ã¿å®è¡ããããç§ã®åçã§æ瀺ãããåãã£ã¹ããããå®å
šã§ãªãIMOã ãã®æå³ã§ãçµæã®ã¯ã©ã¹ã¿ã€ãC & Maker<T>
ã¯ã C
äŸåããä»ã®ãã¹ãŠãšã®äºææ§ãç¶æããå¿
èŠããããŸãã
ãŸããã€ã³ã¿ãŒãã§ã€ã¹ã®éçã¡ãœãããããã§åœ¹ç«ã€å Žæãæ³åããŠã¿ãŸããããäœãã足ããªãå¯èœæ§ããããŸãã ã€ã³ã¿ãŒãã§ã€ã¹ã«static make?(... args: any[]): self
ãããªãã®ãããå Žåã§ããåŒã³åºãã®åã«å®è¡æã«ååšãããã©ããã確èªããå¿
èŠããããŸãã ãã®è°è«ãç¶ãããå Žåã¯ããã€ãºãæžããããã«ä»ã®å Žæã§ããããããšãæ€èšããŸãããã ïŒslightly_smiling_faceïŒ
ãããã£ãŠãåãã€ã³ã¿ãŒãã§ã€ã¹ãå®è£ ããã¯ã©ã¹ã§éçãã¡ã¯ããªã¡ãœãããåãã§ãã¯ããããšã¯ã§ããŸãããïŒ
ç§ã®ãŠãŒã¹ã±ãŒã¹ã¯æ¬¡ã®ãšããã§ãã
interface IObject {
static make(s: string): IObject;
}
class A implements IObject{
static make(s: string): IObject {
// Implementation A...
}
}
class B implements IObject{
static make(s: string): IObject {
// Implementation B...
}
}
A.make("string"); // returns A
B.make("string"); // returns B
ãã®ããã ãã«æ°ãããã¡ã¯ããªã¯ã©ã¹ãäœæããããããŸããã
@ tyteen4a03ãã®äŸããIObject
ãåé€ãããšãã³ã³ãã€ã«ãããŸãã https://github.com/Microsoft/TypeScript/issues/17545#issuecomment-319422545ãåç
§ããŠ
@ andy-msã¯ããæããã«æ©èœããŸãããåãã§ãã¯ã®å šäœçãªãã€ã³ãã¯ãåããã§ãã¯ããããšã§ãã ãã¹ãŠã®ãŠãŒã¹ã±ãŒã¹ãã³ã³ãã€ã«ããã®ã«ååãªçšåºŠãŸã§åå®å šæ§ããã€ã§ãäœäžãããããšãã§ããŸãããããã¯æ©èœèŠæ±ã§ãããããã»ã©ã¯ã¬ã€ãžãŒã§ã¯ãªããšããäºå®ãç¡èŠããŠããŸãã
ã¯ããæããã«æ©èœããŸãããåãã§ãã¯ã®å šäœçãªãã€ã³ãã¯ãåããã§ãã¯ããããšã§ãã
ããã¯ãã¯ã©ã¹ã®éçåŽãã€ã³ã¹ã¿ã³ã¹åŽãšã¯å¥ã®ã€ã³ã¿ãŒãã§ãŒã¹ã§ããã implements
ãã€ã³ã¹ã¿ã³ã¹åŽãæãæ¹æ³ã«é¢ããlong longlongã¹ã¬ããã§ãã @ andy-msã¯ã @ tyteen4a03ã«ãã³ãŒãã®ã¹ãããããæ©èœãããæ¹æ³ã瀺ããŠããŸãããããã¯ãåãã§ãã¯ãå¿ããªãããã«ã_ééã£ã_ããã§ãã
éçã¡ãœãããã¯ã©ã¹ãžã§ããªãã¯ãã©ã¡ãŒã¿ãŒã䜿çšã§ããããã«ããããã®ç§ã®ãŠãŒã¹ã±ãŒã¹ã¯ãããã¯ã¹ã€ã³ã¯ã©ã¹ã®å Žåã§ãã ã¢ãããŒã·ã§ã³ã䜿çšããŠåãããŒã¿ããŒã¹ãªã©ãå®çŸ©ãããšã³ãã£ãã£ãã¬ãŒã ã¯ãŒã¯ãæ§ç¯ããŠããŸãããšã³ãã£ãã£ã¯ã©ã¹ã«éçé¢æ°ãæ··åšãããŠãæ£ããå ¥åããããªããžããªã«ç°¡åã«ã¢ã¯ã»ã¹ã§ããããã«ãããã§ãã
class RepositoryMixin<T> {
public static repository(): EntityRepository<T> {
return new EntityRepository<T>(Object.getPrototypeOf(this));
}
}
@mixin(RepositoryMixin)
class Entity implements RepositoryMixin<Entity> {
public id: number;
}
Entity.repository().save(new Entity());
@rmblstrpäŸã§ææ¡ãããæ©èœãã©ã®ããã«äœ¿çšãããã瀺ããŠããã ããŸããïŒ ã§ããã°æ€èšŒå¯èœãªãã®ãšããŠïŒ
ãã®æ©èœãå¿ èŠãšããªã@rmblstrp ã å®éããã³ã¬ãŒã¿ã䜿çšããŠããã®ã§ã泚éä»ãã¯ã©ã¹ãå¿ èŠãªéçã¡ãœãããæäŸããŠããããšã確èªããããã«ãå®éã«ãã®ã¿ã€ããæå®ã§ããŸãã äž¡æ¹ã¯å¿ èŠãããŸããããå®éã«ã¯ããªãåé·ã«ãªããŸãã
ããã«ã¡ã¯ãç§ã¯ãã®äŒè©±ã®ãããã¯ãç¯å²ããå€ããããããŸããã
ãã ããããŸããŸãªããã°ã©ãã³ã°ãã©ãã€ã ïŒOOPãŸãã¯é¢æ°åã䜿çšããå¿
èŠããããŸããïŒïŒã«ã€ããŠè©±ãåã£ãã®ã§ãããŒã¿ããŒã¹ãžã®æ¥ç¶ãäœæããããäœããã®ãµãŒãã¹ãæäŸãããããããã«é垞䜿çšãããéçãã¡ã¯ããªã«ã€ããŠå
·äœçã«èª¬æããŸãã
PHPãJavaã®ãããªå€ãã®èšèªã§ã¯ãéçãã¡ã¯ããªã¯äŸåæ§æ³šå
¥ãæ¯æããŠéæšå¥šã«ãªã£ãŠããŸãã äŸåæ§æ³šå
¥ãšIOCã³ã³ãããŒã¯ãSymfonyãSpringãªã©ã®ãã¬ãŒã ã¯ãŒã¯ã®ãããã§äººæ°ããããŸãã
Typescriptã«ã¯ãInversifyJSãšããååã®ãã°ãããIOCã³ã³ããããããŸãã
ãããã¯ããã¹ãŠãã©ã®ããã«åŠçããããã確èªã§ãããã¡ã€ã«ã§ãã
https://github.com/Deviad/virtual-life/blob/master/models/generic.ts
https://github.com/Deviad/virtual-life/blob/master/service/user.ts
https://github.com/Deviad/virtual-life/blob/master/models/user.ts
https://github.com/Deviad/virtual-life/blob/master/utils/sqldb/client.ts
https://github.com/Deviad/virtual-life/blob/master/bootstrap.ts
ç§ã¯ãããå®ç§ãªè§£æ±ºçã ãšèšã£ãŠããããã§ã¯ãããŸããïŒãããŠããããããã¯ããã€ãã®ã·ããªãªãã«ããŒããŠããªããŸãŸã«ããŸãïŒããReactã§ãæ©èœããŸãããã§ã«ããªããèŠãããšãã§ããããã€ãã®äŸããããŸãã
ãŸããã©ã¡ããåªããŠãããã«ã€ããŠããã®åŽé¢ãã«ããŒããé¢æ°åããã°ã©ãã³ã°ã«é¢ãããã®ãããªãã芧ã«ãªãããšããå§ãããŸãïŒhttpsïŒ//www.youtube.com/watchïŒv = e-5obm1G_FYïŒt = 1487s
ãã¿ãã¬ïŒèª°ãããåªããŠããããã§ã¯ãããŸããã解決ãããåé¡ã«ãã£ãŠç°ãªããŸãã ãŠãŒã¶ãŒãæ宀ãæåž«ãæ±ãå Žåã¯ããªããžã§ã¯ãã䜿çšããŠåé¡ãã¢ãã«åããæ¹ãOOPã®æ¹ãé©ããŠããŸãã
Webãµã€ããã¹ãã£ã³ããããŒãµãŒãå¿
èŠãªå Žåã¯ãéšåçãªçµæãªã©ãè¿ãé¢æ°çºçåšã䜿çšããæ¹ãæ©èœçã§ããå¯èœæ§ããããŸãã:)
@Deviad @aluanhaddadç§ã®æ皿以æ¥ãç§ã¯InversifyJSã䜿çšããŠããŸããããããã¯çµ¶å¯Ÿã«çŽ æŽããããééããªãã¯ããã«åªããæ¹æ³ã§ãã ç§ã®æçš¿ã®æç¹ã§ã¯ã以åã«PHP / CïŒã䜿çšããåŸãTypescript / Nodeã䜿ãå§ããã°ããã§ããã ç°å¢ãšå©çšå¯èœãªããã±ãŒãžã«æ £ããã®ã«å°ãæéãããããŸããã
ããã®ç¶æ³ã¯ã©ãã§ããïŒ ãªããªããžããªå ã®æªè§£æ±ºã®åé¡ãéãç¶ããã®ã§ããïŒ
ã€ã³ã¿ãŒãã§ã€ã¹ã«éçã¡ãœãããæããªããšããéžæã¯ä»æ§ã«ãããã®ã§ãããããããã¯åé¡ã«ãwontfixããšããæ瀺çãªã©ãã«ãä»ããå¿ èŠãããã±ãŒã¹ã®1ã€ã ãšæããŸãã
@ enet4 ãç§ã¯æ°åè ã§ãããããã¯ãŸã£ããæ確ã§ã¯ãããŸããã§ããã ãããšä»ã®é¢é£ããåé¡ãèªããšãããã¯äž»ã«æ¬¡ã®åé¡ã®ããã«èãããŸãïŒ
A.é£ããã§ã
B.ãããŸã§ã«èŠãïŒããããã®ïŒç¹å®ã®æ§æã¯å¥œãã§ã¯ãããŸããã
C.å°æ°ã®å°æ°æŽŸã¯ããããå®è¡å¯èœã§ããã¹ãã ãšã¯ãŸã£ããä¿¡ããŠããããããããããå®è¡ããããã®çŸåšã®å¥åŠãªæ¹æ³ãåé€ããããšèããŠããŸãã
ãããå®éã«èšèšã«ãããã®ã§ãããæ åœè ããããæãŸãªãå Žåã¯ãå ¬éããã¥ã¡ã³ããäœæãããã®ã¹ã¬ãããä»ã®ã¹ã¬ããã«ã¯ãã¹ãªã³ã¯ããå¿ èŠããããŸãã ããã«ãããç§ãã¡ãäžèªç±ãªç¶æ ã«ä¿ã€ãããå€ãã®æéãç¯çŽã§ããŸãã
ãã®ã¹ã¬ããã§ã¯ãã§ã«ïŒ14600ã«ãªã³ã¯ããŠããŸããããã¯ãæ©èœãªã¯ãšã¹ãã§åŸãã¹ãåé¡ã§ãã
æãåèã«ãªãã³ã¡ã³ã
@aluanhaddadããªãã®ã³ãŒãã¯æãããªäœãã®åé¿çã ãšæããŸãã
ã©ã¡ããããã¯ã£ãããšèŠããŸããïŒ