【问题标题】:What do I do when a TypeScript definition file I am using is missing a single definition?当我使用的 TypeScript 定义文件缺少单个定义时,我该怎么办?
【发布时间】:2016-09-30 12:59:32
【问题描述】:

我正在为我的项目使用React 类型定义。我注意到它缺少array returned by the refs property 中元素的焦点方法 - 所以我无法让this example 工作。基本上,编译器说:property 'focus' does not exist on type 'Component <any, any> | Element'。这是因为 focus 存在于类型 HTMLElement 而不是 Element 上。定义文件应将 refs 的返回类型指定为 | HTMLElement 或其他包含焦点方法的扩展接口(我不确定哪个,但这不是我的问题的重点)。

我的问题是:我现在该怎么办?我无法继续开发!

我知道我可以分叉定义文件并自己修补它,但这似乎是我在 TypeScript 中不断提出的一个问题,我想知道是否有一个不那么繁琐的解决方案,这意味着我可以快速移动。似乎我在构建我的应用程序以经常进行 TypeScript 修补时不得不走出自己的轨道!

【问题讨论】:

    标签: javascript typescript


    【解决方案1】:

    快速而肮脏的解决方案是强制转换为 any选择退出类型检查,即

     onSubmitEditing={(event) => { 
        (this.refs.SecondInput as any).focus(); 
     }}
    

    在DefiniteTyped 上提交拉取请求将是一个不错的举措......

    注意:如果需要,您可以使用“双重转换为any”来变得更加“复杂”

     type ProperRef = Component <any, any> | HTMLElement
    
     onSubmitEditing={(event) => { 
        const secondRef =  this.refs.SecondInput as any as ProperRef;
        secondRef.focus(); 
     }}
    

    【讨论】:

    • 双铸有什么好处?
    • @cubabit。在那种特殊情况下,没有。更一般地,当转换为 any 时,您选择不检查此变量的类型。使用双重转换,您可以选择退出然后重新加入,并从再次输入该变量中受益。
    猜你喜欢
    • 2011-07-11
    • 2018-11-22
    • 2019-12-27
    • 2012-10-20
    • 1970-01-01
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    相关资源
    最近更新 更多