属性selectedIndex在HTMLElement类型中不存在

jvc*_*h23 6 typescript

我正在尝试将一些js文件转换为在asp.net webforms中使用typescript.javascript工作但由于错误,它不会在ts中编译.这是代码

 var mDropDownID = arySecondTier[x];
 var DropdownList = (document.getElementById("ctl00_ContentPlaceHolder1_lvCASec2_Detail_ctrl" + mDropDownID + "_ddlPoints"));
 var SelectedIndex = DropdownList.selectedIndex;
Run Code Online (Sandbox Code Playgroud)

在selectedIndex行上发生错误.从我用typescript读到的内容,HTMLElement上没有selectedIndex,我需要使用HTMLElement的子类型.如果是这种情况,我将无法找到该子类型的名称.如果它是别的东西,那么我很想知道什么.

我见过一些将DropDownList转换为的人,但我的第一个想法并不是你想要使用打字稿的原因.

谢谢

Nit*_*mer 12

你只需要让编译器认为DropdownList是一个select元素:

var DropdownList = (document.getElementById("ctl00_ContentPlaceHolder1_lvCASec2_Detail_ctrl" + mDropDownID + "_ddlPoints")) as HTMLSelectElement;
 var SelectedIndex = DropdownList.selectedIndex; // no error
Run Code Online (Sandbox Code Playgroud)

此外,您可以这样做:

`ctl00_ContentPlaceHolder1_lvCASec2_Detail_ctrl ${ mDropDownID } _ddlPoints`
Run Code Online (Sandbox Code Playgroud)

而不是字符串连接.


编辑

根据dom中的实际元素,您知道需要哪种类型的元素.
如果你得到一个脚本元素的引用,那么它需要是a HTMLScriptElement,如果它是div然后HTMLDivElement依此类推.

MDN是一个很好的信息来源,但在这种情况下,我只需检查lib.d.ts(也应该从你的IDE中获得)来查看这个元素有什么.
例如,HTMLScriptElement具有:

interface HTMLScriptElement extends HTMLElement {
    async: boolean;
    charset: string;
    defer: boolean;
    event: string;
    htmlFor: string;
    src: string;
    text: string;
    type: string;
}
Run Code Online (Sandbox Code Playgroud)