通常,我在全局index.d.ts
文件中看到过模块声明。
declare module 'thing' {
interface SomeChildInterface {
myMethod(): SomeKindOfMethod;
}
}
但是如果您要在更特定的文件(例如某个函数)中声明它,该怎么办。在另一个文件中,您将声明相同的模块,但是使用不同的方法。
然后将其“范围”到仅该文件吗?
将方法添加到现有库时:
import * as Yup from 'yup';
import { ObjectSchema, StringSchema } from 'yup';
function isUniqueValue() {
return Yup.string().test({
exclusive: true,
name: 'isUniqueValue',
message: 'Value already exists',
test(value) {
return this.options.context !== value
},
});
}
Yup.addMethod<Yup.StringSchema>(Yup.string, 'isUniqueValue', isUniqueValue);
const schema = Yup.object().shape({
// TS2339: Property 'isUniqueValue' does not exist on type 'StringSchema '.
name: Yup.string().isUniqueValue()
});
现在,这给了我该方法不存在的错误。我可以将其添加到文件中:
declare module 'yup' {
interface Schema<T> {
isUniqueValue(): StringSchema;
}
}
然后它起作用。但是我不确定在多个不同文件中这样做是否会造成干扰。并且为此生成通用全局文件意味着该文件必须知道代码库中的所有其他方法,从而使其紧密耦合。