reactjs - 打字稿。如果 props 对未定义的属性发誓怎么办?反应
问题描述
我使用各种库。而且这些库没有 TypeScript。如何在界面中定义它们?我的意思是这个。
Interface IProps {
somelibrary: // What type should I write here?
}
我知道存在类型定义。但是如何理解使用哪种类型。例如
Interface IProps {
i18n: // What type should I write here?
}
解决方案
因此,如果我对您的理解正确,您希望定义不一定具有 .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 编译器你已经为库定义了这些类型,你可以通过在tsconfig.json
compilerOptions 块中指定以下内容来做到这一点
"typeRoots": ["./node_modules/@types", "./src/**/typings"],
这告诉编译器 - 仍然尊重 node_modules 中的类型,但还包括我在项目中创建的任何自定义定义。
完成此设置后,您应该会在 IDE 中找到 intellisense 为您选择这些定义。
我希望这能够解锁你
推荐阅读
- material-ui - Material UI 1.0 中的有条件触发按钮导航
- ios - 没有代码的 Crashlytics 突出显示行
- javascript - 使用 new Date().toLocaleTimeString() 时获取毫秒
- javascript - 用于验证字符串格式的正则表达式
@ - python - lxml 在 bs4 中未被识别:Mac 上的 Python 3
- asp.net - 验证 html5 两个提交按钮 .net
- android - 如何在 react-native 中缩小 WebView?
- javascript - 将图像设置为页面在 React 中呈现的第一张图像
- sas - 手动和由 SAS 完成时的卡方检验结果差异
- reactjs - 模拟 textarea Jest 测试的更改