Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将TypeScript定义文件用于其他函数_Javascript_Typescript - Fatal编程技术网

Javascript 如何将TypeScript定义文件用于其他函数

Javascript 如何将TypeScript定义文件用于其他函数,javascript,typescript,Javascript,Typescript,我是TS新手,希望使用我创建的定义文件告诉一个单独的函数它的参数类型 功能 export default ({}) => { const myFunction = ({ param1 }: { param1: string }) => { return param1; }; return { myFunction }; }; 功能d.ts declare var _default: ({}: {}) => { myFunction:

我是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;
someotherfile.ts

export default ({ functions }) => {
  functions().myFunction({ param1: 1 });
};
functions
参数来自上面的functions.ts,但是当然,其他一些file.ts不知道
函数的结构是什么

我如何在这里使用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 });
};

下面是一个示例,您可以看到关于错误参数类型的错误,它不是这样工作的

您可以使用定义为可以导入的非类型化javascript代码提供类型。例如,假设您将库
X
导入到您的项目中,但它没有
@types/X
包。然后您可以编写一个
.d.ts
文件,将其集成到项目中。但这是完全可选的,您也可以按原样使用JS代码,而不使用类型

如果您希望函数的返回取决于它的参数,那么您可能需要的是泛型,这可能是一个有点复杂的主题。例如:

const myFunction = <Input extends { param1: any }>(inp: Input) => {
    return inp.param1
};
最后一个示例对函数输入施加了类似的约束,但返回类型将始终被删除为
any


不同之处在于,在第2个示例中,我们“强制”输入类型,而在第1个示例中,我们通常在施加约束时使用输入的任何类型。

导入路径不能以“.d.ts”扩展名结尾。考虑导入“./Office”代替TS(2691)。然而,你确实给了我一个想法,将typeroot添加到我的tsconfig.json文件中……是的,但是我的导入路径并不是以
.ts
d.ts
结尾,我刚才用注释提到了哪个导入与你的示例中的文件等效。明白了,但是我如何导入函数类型?实际上,你可以创建一个新的类型,我更新了我的答案,下面是stackBlitz示例>您可以导入的非类型化javascript代码。但是我以前写过的非类型化javascript呢?它不是一个库,只是以前是JS现在是TS的代码。
const myFunction = (inp: { param1: any, [k: string]: any }) => {
    return inp.param1
};