繁体   English   中英

打字稿。 如果道具对未定义的属性发誓该怎么办? 反应

[英]TypeScript. What should I do if props swears at a property that is not defined? React

我使用各种库。 而且这些库没有 TypeScript。 如何在接口中定义它们? 我是说这个。

Interface IProps {
somelibrary: // What type should I write here?
} 

我知道存在类型定义。 但是如何理解使用哪种类型。 例如

Interface IProps {
i18n: // What type should I write here?
} 

也许你不需要定义一个,除非你想要严格的类型提示? 还有另一个答案,我发现我自己过去曾回过几次 - https://stackoverflow.com/a/12695001/2174733

因此,如果我理解正确的话,您想定义不一定具有 .d.ts 文件的库的类型。

前段时间我确实开始为我使用的名为 rethinkdb 的数据库执行此操作。 ( https://www.npmjs.com/package/rethinkdbdash )

正如一个警告,也有少数any在这里引用但那纯粹是因为这是POC的时间,但你应该希望得到的是什么,我想实现的总体思路。

declare module 'rethinkdbdash' {
export default function RethinkDBDash(config: ConnectionConfig): RethinkConnection

interface ConnectionConfig {
    host?: string;
    port?: number;
    db?: string;
}

export interface RethinkConnection {
    table(document: string): Term;

    asc(columnName: string): Term;

    desc(columnName: string): Term;
}

interface filterQueryParams {
    [key: string]: string;
}

interface Row {
    (fieldName: string): Term;
}

interface Term {
    insert(documents: any, options?: any): void;

    filter(filterParams: filterQueryParams): any; //@todo change the return type

    update(callback: (row: Row) => void): Term;

    append(document: any): Term;

    pluck(...columnNames: string[]): Term;

    limit(amount: number): Term;

    orderBy(fieldName: string): Term;

    orderBy(obj: any): Term;

    run(): any;
}}

上面是一个名为typings 的文件夹中名为rethink.d.ts 的文件。

您基本上可以将其视为我期望如何与底层库交互的合同。

你必须做的另一件事是告诉 TypeScript 编译器你已经为库定义了这些类型,你可以通过在 compilerOptions 块中的tsconfig.json指定以下内容来做到这一点

    "typeRoots": ["./node_modules/@types", "./src/**/typings"],

这告诉编译器 - 仍然尊重 node_modules 中的类型,但也包括我在项目中创建的任何自定义定义。

完成此设置后,您应该会在 IDE 中找到智能感知为您挑选这些定义。

我希望这能够解除对你的封锁

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM