【问题标题】:TS - Using interface from third party typingsTS - 使用来自第三方类型的接口
【发布时间】:2018-10-10 07:55:11
【问题描述】:

基本上我使用@types/flickity 来添加Flickity 的定义,但是当我尝试在我自己的脚本中使用FlickityOptions 时,我收到一条错误消息Cannot find name 'FlickityOptions'

我尝试在tsconfig.json 中添加typeRoots 并通过files 手动添加文件,但我仍然收到错误,也尝试使用/// <reference

有什么想法吗?

【问题讨论】:

    标签: javascript typescript types


    【解决方案1】:

    FlickityOptions 不会从 @types/flickity 导出,因为声明文件 sets export = FlickityFlickityOptions 位于导出的命名空间之外。考虑将filing an issue against DefinitelyTyped 导出为FlickityOptions。作为一种解决方法,您可以从Flickity 构造函数中提取FlickityOptions 类型:

    import Flickity = require("flickity");
    type FlickityOptions =
        typeof Flickity extends {new(selector: string | Element, options?: infer FO): Flickity} ? FO : never;
    

    (与this answer比较。)

    【讨论】:

    • 我尝试了第一个,我得到了Module '"/node_modules/@types/flickity/index"' has no exported member 'FlickityOptions'. 当我尝试Flickity.FlickityOptions 时,我得到了Namespace 'Flickity' has no exported member 'FlickityOptions'.。这可能是d.ts 文件的问题吗?
    • 很抱歉,我没有仔细阅读d.ts 文件,并且忽略了测试建议的解决方案。查看更新的答案。
    • 效果很好,谢谢!你能解释一下它是如何工作的吗?
    • 这是使用conditional typesFlickity构造函数的类型与一个模式相匹配,并以这种后门方式提取FlickityOptions的类型。
    猜你喜欢
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    • 2017-05-31
    • 1970-01-01
    • 2014-05-17
    • 1970-01-01
    • 2023-01-07
    • 1970-01-01
    相关资源
    最近更新 更多