Typescript:从实现发出具有不同类型的声明文件?
是否可以指示TypeScript编译器发出与实现中使用的类型不同的声明文件?例如:Typescript:从实现发出具有不同类型的声明文件?,typescript,typescript-declarations,Typescript,Typescript Declarations,是否可以指示TypeScript编译器发出与实现中使用的类型不同的声明文件?例如: // source brewery.ts function brewBeer(name: unknown): Beer { ... } // emitted brewery.d.ts declare function brewBeer(name: string): Beer; “你为什么要这样?” 我正在用TypeScript编写一个库,我希望它也能用于非TypeScript项目。因此,我在运行时检查传递给公
// source brewery.ts
function brewBeer(name: unknown): Beer { ... }
// emitted brewery.d.ts
declare function brewBeer(name: string): Beer;
“你为什么要这样?”
我正在用TypeScript编写一个库,我希望它也能用于非TypeScript项目。因此,我在运行时检查传递给公开函数的参数的有效性,如下所示:
export function brewBeer(name: string): Beer {
if (typeof name !== 'string') {
throw new TypeError(`'${name}' is not a beer name.`);
}
// Continue brewing...
}
// brewery.d.ts
declare function brewBeer(name: unknown): Beer;
这种方法是可用的,但并不完美:
export function brewBeer(name: string): Beer {
if (typeof name !== 'string') {
throw new TypeError(`'${name}' is not a beer name.`);
}
// Continue brewing...
}
// brewery.d.ts
declare function brewBeer(name: unknown): Beer;
这在使用TypeScript的项目中几乎没有用处
那么,有没有一种方法可以使用unknown
并仍然使用“正确”类型发出声明文件,而不用手动更正它们
是否可以指示TypeScript编译器发出与实现中使用的类型不同的声明文件
答案很简单:没有
是否可以指示TypeScript编译器发出与实现中使用的类型不同的声明文件
简单回答:否。在测试中使用
任何强制转换或/@ts忽略:
brewBeer(42);
由于@ts ignore
会影响整行(例如,您可能会拼写错误brewBeer
),我更喜欢any
方法。在测试中使用any
强制转换或/@ts ignore
:
brewBeer(42);
由于@ts ignore
会影响整行(例如,您可能会拼写错误brewBeer
),因此我更喜欢any
方法