问题描述
我有一个可行的解决方案-导出声明文件中定义的类型,这些类型可在我的项目中使用并导出到外部项目中。
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
}
虽然我很乐意为此解决,但我想知道这样做是否正确,或者是否有最佳实践。
解决方法
声明文件不应该那样使用。通常,实际上您根本不编写它们。要编写它们的主要原因是:
-
当您在 JavaScript 中拥有一个库并且希望TypeScript用户也能够使用它时。您可以用TypeScript重写您的库,但这并不有趣,因此您可以只编写声明并将代码保留在JavaScript中。
-
有时您想声明一些全局的东西。例如,在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