void JSBTypeScript::ExportModuleClasses(JSBModule* module) { Vector<SharedPtr<JSBClass>> classes = module->GetClasses(); if (!classes.Size()) return; source_ += "\n"; for (unsigned i = 0; i < classes.Size(); i++) { JSBClass* klass = classes.At(i); source_ += " export class " + klass->GetName(); JSBClass* base = klass->GetBaseClass(); if (base) { if (klass->GetPackage() != base->GetPackage()) { source_ += " extends " + base->GetPackage()->GetName() + "." + base->GetName(); } else { source_ += " extends " + base->GetName(); } } source_ += " {\n\n"; Vector<String> propertyNames; klass->GetPropertyNames(propertyNames); for (unsigned j = 0; j < propertyNames.Size(); j++) { JSBProperty* prop = klass->GetProperty(propertyNames[j]); JSBFunctionType* ftype = NULL; if (prop->getter_ && !prop->getter_->Skip()) { ftype = prop->getter_->GetReturnType(); } else if (prop->setter_ && !prop->setter_->Skip()) ftype = prop->setter_->GetParameters()[0]; if (!ftype) continue; String scriptType = GetScriptType(ftype); String scriptName = prop->GetCasePropertyName(); source_ += " " + scriptName + ": " + scriptType + ";\n"; } if (propertyNames.Size()) source_ += "\n"; JSBFunction* constructor = klass->GetConstructor(); if (constructor) { ExportFunction(constructor); source_ += "\n"; } PODVector<JSBFunction*>& functions = klass->GetFunctions(); for (unsigned j = 0; j < functions.Size(); j++) { JSBFunction* func = functions[j]; if (func->IsConstructor() || func->IsDestructor() || func->Skip()) continue; ExportFunction(func); } for (unsigned j = 0; j < klass->GetNumTypeScriptDecl(); j++) { source_ += " " + klass->GetTypeScriptDecl(j) + "\n"; } source_ += "\n }\n\n"; } source_ += "\n"; }