微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将类型从声明文件导出到外部项目的最佳实践

如何解决将类型从声明文件导出到外部项目的最佳实践

我有一个可行的解决方案-导出声明文件中定义的类型,这些类型可在我的项目中使用并导出到外部项目中。

我可以做的唯一方法是使用名称空间来包装类型。

github-项目X

@ types / index.d.ts

declare namespace projectGlobal {
  interface Person = {
    name: string;
    age: number;
  }
}
// other localised types here,cannot be exported...
interface Local {
  func: () => string
}

src / index.ts

export type Person = ProjectGlobal.Person; // can only export if referenced via namespace.
// export type Local = Local; // This fails to export

const person1: Person = {
  name: 'john',age: 45
}

github项目Y

import {Person} from 'projectx';

const person1: Person = {
  name: 'john',age: 45
}

虽然我很乐意为此解决,但我想知道这样做是否正确,或者是否有最佳实践。

解决方法

声明文件不应该那样使用。通常,实际上您根本不编写它们。要编写它们的主要原因是:

  1. 当您在 JavaScript 中拥有一个库并且希望TypeScript用户也能够使用它时。您可以用TypeScript重写您的库,但这并不有趣,因此您可以只编写声明并将代码保留在JavaScript中。

  2. 有时您想声明一些全局的东西。例如,在React项目中,您可以从图像文件app.use(cookieParser()); app.use(session({ secret: 'bla' })); passportConfig(app); .png和co中导入数据。因此,React创建了一个带有声明的.jpg文件(因为默认情况下,TS不会将这些文件视为模块):

.d.ts

差不多了,在其他情况下,只使用普通的declare module '*.jpg' { const url: string export default url } 文件即可。

.ts

我没有任何理由,为什么您不能这样做,如果有理由的话,请随时发表评论。如果只想将类型和逻辑分开,则创建export type Person = { name: string age: number } const person1: Person = { // ... } types.ts并使用do-stuff.ts重新导出内容:

index.ts
// types.ts
export type Person = {
  name: string
  age: number
}
// do-stuff.ts
import { Person } from './types'

const person1: Person = {
  // ...
}
export default person1

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。