簡體   English   中英

從 js 中隱藏 function(僅限打字稿功能)

[英]Hide function from js (typescript only function)

我有一個 javascript 庫,它通過 index.d.ts 定義類型。 我想為 javascript 公開與 typescript 不同的 API。

看起來如果你想從 typescript 中隱藏一些東西,你不能在 .d.ts 文件中定義它。 是否可以反過來做? 據我所知,.d.ts 文件只能有定義,沒有實現。 有沒有辦法實現 typescript 僅功能 in.d.ts 或其他?

例如,我想公開一個僅用於 js 的通用 get() function,並鍵入僅為 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];
  }
}

這在概念上是不可能的,因為在運行時沒有 typescript 您的 typescript 編譯為 javascript。 這些類型基本上只是被刪除了。 也沒有辦法真正從 typescript 隱藏一些東西 僅僅因為您沒有類型並不能阻止您調用 function。

但是,如果您只想正確輸入,則正確的方法是 generics。 所以如果你有一個get() function 你可以這樣輸入:

function getIt<T extends String | Number>(name: string) : T {
  ...
}

然后你可以像 ts 中的getIt<Number>("...")或 js 中的getIt("...")一樣使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM