从 js 中隐藏函数(仅打字稿函数)
Hide function from js (typescript only function)
我有一个 javascript 库,它通过 index.d.ts 定义类型。我想为 javascript 公开一个不同于打字稿的 API。
似乎如果你想从打字稿中隐藏一些东西,你可以不在 .d.ts 文件中定义它。是否可以反过来做?据我所知, .d.ts 文件只能有定义,没有实现。有没有办法在 .d.ts 或其他方式中实现仅打字稿功能?
例如,我想公开一个仅供 js 使用的通用 get() 函数,以及仅为 typescript 定义的类型化 getString 和 getInt 包装器。
index.d.ts
declare module 'example' {
export function getConfig(): Config;
export interface Config {
// have these wrap get() and return null if the type is wrong
getString(name: string): string | null;
getInt(name: string): int | null;
}
}
index.js
module.exports = {
getConfig() {
return new Config({
testString: "test",
testInt: 12,
})
}
}
Config.js
class Config {
constructor(configObject) {
this.configObject = configObject;
}
get(index) {
return this.configObject?[index];
}
}
这在概念上是不可能的,因为在运行时没有打字稿!
您的打字稿被编译为 javascript。这些类型基本上只是被删除了。
也没有办法真正从 typescript 中隐藏一些东西。仅仅因为您没有类型并不能阻止您调用函数。
但是,如果您只希望它用于正确输入,那么正确的方法就是泛型。所以如果你有一个 get()
函数,你可以这样输入它:
function getIt<T extends String | Number>(name: string) : T {
...
}
然后你可以像 getIt<Number>("...")
来自 ts 或只是 getIt("...")
来自 js.
我有一个 javascript 库,它通过 index.d.ts 定义类型。我想为 javascript 公开一个不同于打字稿的 API。
似乎如果你想从打字稿中隐藏一些东西,你可以不在 .d.ts 文件中定义它。是否可以反过来做?据我所知, .d.ts 文件只能有定义,没有实现。有没有办法在 .d.ts 或其他方式中实现仅打字稿功能?
例如,我想公开一个仅供 js 使用的通用 get() 函数,以及仅为 typescript 定义的类型化 getString 和 getInt 包装器。
index.d.ts
declare module 'example' {
export function getConfig(): Config;
export interface Config {
// have these wrap get() and return null if the type is wrong
getString(name: string): string | null;
getInt(name: string): int | null;
}
}
index.js
module.exports = {
getConfig() {
return new Config({
testString: "test",
testInt: 12,
})
}
}
Config.js
class Config {
constructor(configObject) {
this.configObject = configObject;
}
get(index) {
return this.configObject?[index];
}
}
这在概念上是不可能的,因为在运行时没有打字稿! 您的打字稿被编译为 javascript。这些类型基本上只是被删除了。 也没有办法真正从 typescript 中隐藏一些东西。仅仅因为您没有类型并不能阻止您调用函数。
但是,如果您只希望它用于正确输入,那么正确的方法就是泛型。所以如果你有一个 get()
函数,你可以这样输入它:
function getIt<T extends String | Number>(name: string) : T {
...
}
然后你可以像 getIt<Number>("...")
来自 ts 或只是 getIt("...")
来自 js.