בנאי - איך להשתמש במחלקות אנונימיות ב-TypeScript
אני מנסה ליצור פונקציית עזר, כדי להוסיף קרייה, כדי ליצור הגדרות נפוצות עבור מחלקות. לדוגמה:
class Person {
private name: string;
private sex: string;
constructor (name: string, sex: string) {
this.name = name;
this.sex = sex;
}
}
var newPersonSex = function (sex: string) {
return function (name: string) {
return new Person(name, sex);
}
}
var MalePerson = newPersonSex('male');
var FemalePerson = newPersonSex('female');
כך שכעת כאשר נוצרים אובייקטים של MalePerson ו-FemalePerson, זה בעצם מחזיר במקום זאת מופע חדש של Person.
var m = new MalePerson( 'john' );
כדי שמערכת הטיפוס תאפשר לי עדיין להשתמש ב-'new', MalePerson צריך להיות סוג קונסטרקטור. לדוגמה: 'new (name:string) => Person'. זה גם צריך להיות סוג ההחזרה של הפונקציה.
עם זאת, עם ההצהרות הללו שנוספו, אני לא יכול להחזיר פונקציה מתוך 'newPersonSex'. לדוגמה, זה לא חוקי:
var newPersonSex = function (sex: string) : new(name:string) => Person {
return function (name: string) {
return new Person(name, sex);
}
}
איך אני יכול ליצור ולהחזיר פונקציית בנאי או מחלקה חדשה באופן מיידי?
תשובה #1
נסה את ההגדרה הזו של newPersonSex:
var newPersonSex = function (sex: string) {
return <new (name: string) => Person> <any> function (name: string) {
return new Person(name, sex);
}
}
הבעיה בקוד שלך היא שלפונקציות יש רק חתימות קריאה, ולא חתימות בנייה. הדוגמה שלי למעלה עוברת על זה על ידי התחלה בהצהרה שסוג הפונקציה הזה הוא any, ואז הצהרה שסוג ה-any הוא למעשה בונה.
שימו לב שהסוג של newPersonSex ייקבע מהסוג שמוחזר שלו, כך שאין צורך להוסיף הערת פונקציה.
