I am trying to make externs for the Google Closure Compiler for types that have no constructor.
I have tried the following, but it gives me a Bad type annotation. Unknown type WindowsMediaActiveX.Cdrom
error because nothing tells the compiler that WindowsMediaActiveX.Cdrom
is a type instead of just a collection of methods/properties.
/**
* @fileoverview Declares externs for the Windows media player ActiveX control.
* @author Joshua Dwire
* @suppress {duplicate}
*/
var WindowsMediaActiveX={};
/**
* Methods and properties for accessing a CD or DVD in its drive.
*/
WindowsMediaActiveX.Cdrom={};
/**
* Retrieves the CD or DVD drive letter.
* @type {string}
* @readonly
*/
WindowsMediaActiveX.Cdrom.prototype.driveSpecifier;
/**
* Methods and properties for accessing a collection of CD or DVD drives.
*/
WindowsMediaActiveX.CdromCollection={};
/**
* Retrieves the Cdrom object associated with a particular drive letter.
* @param {string} driveSpecifier String containing the drive letter followed by a colon (":") character.
* @returns {WindowsMediaActiveX.Cdrom}
*/
WindowsMediaActiveX.CdromCollection.prototype.getByDriveSpecifier=function(driveSpecifier){};
I know I could change:
/**
* Methods and properties for accessing a CD or DVD in its drive.
*/
WindowsMediaActiveX.Cdrom={};
to:
/**
* Methods and properties for accessing a CD or DVD in its drive.
* @constructor
*/
WindowsMediaActiveX.Cdrom=function(){};
but then the compiler wouldn't show a warning if I or someone else tried to use new WindowsMediaActiveX.Cdrom()
. Any ideas on how to define this?
For those of you who want more information, I am working on a media player that will use the Windows Media ActiveX Control to play media. I am also using the Google Closure Compiler and Library. I need to define the externs for the player to work correctly, but none of the types used by the ActiveX Control have constructors. They are all created through other methods or through creating an object in the html. How should I define this in the extern file? Thanks for your help.