簡體   English   中英

如何將 TypeScript 定義文件用於另一個 function

[英]How to use a TypeScript definition file for another function

我是 TS 新手,想使用我創建的定義文件來告訴單獨的 function 它是 arguments 類型。

函數.ts

export default ({}) => {
  const myFunction = ({ param1 }: { param1: string }) => {
    return param1;
  };

  return {
    myFunction
  };
};

函數.d.ts

declare var _default: ({}: {}) => {
    myFunction: ({ param1 }: {
        param1: string;
    }) => string;
};
export default _default;

其他文件.ts

export default ({ functions }) => {
  functions().myFunction({ param1: 1 });
};

functions參數來自上面的functions.ts,但是someotherfile.ts當然不知道functions的結構是什么。

我怎樣才能在這里使用functions.d.ts? 我什至需要使用它嗎?

我認為這將解決您的問題,如果您只需要它,只需創建一個新類型。

// functionsType.ts
export type functions = ({}: {}) => {
  myFunction: ({ param1 }: {
      param1: string;
  }) => string;
};

並像這樣使用它

//someotherfile.ts
import { functions } from './functionsType';

export default (functions: functions) => {
  functions({}).myFunction({ param1: 1 });
};

這是stackBlitz示例,您可以在其中看到有關錯誤參數類型的錯誤

它不是那樣工作的。

您使用定義為您可能導入的無類型 javascript代碼提供類型。 例如,假設您確實將庫X導入到您的項目中,但它沒有@types/X package。 然后您可以編寫一個.d.ts文件將其集成到您的項目中。 但這完全是可選的,您也可以按原樣使用 JS 代碼,無需類型。

如果您希望 function 的返回依賴於它的 arguments,那么您可能正在尋找的是generics ,這可能是一個有點復雜的話題。 例如:

const myFunction = <Input extends { param1: any }>(inp: Input) => {
    return inp.param1
};

在前面的摘錄中,我們告訴 myFunction 接受任何 object 至少具有名為 param1 的屬性 它的返回值將被推斷為 param1 具有的任何類型。 這與寫作不同:

const myFunction = (inp: { param1: any, [k: string]: any }) => {
    return inp.param1
};

最后一個示例對 function 輸入施加了類似的約束,但返回類型將始終擦除為any

不同之處在於,在第二個示例中,我們“強制轉換”輸入類型,而在第一個示例中,我們通常在施加約束時使用進入的任何類型。

暫無
暫無

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

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