typescript 从没有相应库的@types导入类型

aemubtdh  于 2023-01-03  发布在  TypeScript
关注(0)|答案(1)|浏览(197)

对不起,如果问题不清楚,但我不知道如何把它。我有一个谷歌广告脚本项目,我在Typescribe开发。我使用BigQuery库。你知道在谷歌广告你不需要导入任何库(就像在Node.js中一样),因为它们已经在全局范围内可用,所以我只需要从https://www.npmjs.com/package/@types/google-apps-script导入类型。它的工作方式是取消任何错误,如BigQuery未定义等。但我可以导入和使用任何特定的接口吗?例如,我有一个函数返回TableFieldSchema

const bqQuerySchemaGenerator = (description: string, name: string, type: string) => {
    const nameFieldSchema : any = BigQuery.newTableFieldSchema();
    nameFieldSchema.description = description;
    nameFieldSchema.name = name;
    nameFieldSchema.type = type;
    return nameFieldSchema
}

我想定义一个类型来显示这个函数的结果,我知道如果我使用一个相应的库,我通常会导入import {TableFieldSchema} from "google-apps-script"这样的东西,但是正如我提到的,我不使用任何外部库,所以我会想象这样的东西

import type {TableFieldSchema} from "@types/google-apps-script"

const bqQuerySchemaGenerator = (description: string, name: string, type: string) : TableFieldSchema => {
    const nameFieldSchema : any = BigQuery.newTableFieldSchema();
    nameFieldSchema.description = description;
    nameFieldSchema.name = name;
    nameFieldSchema.type = type;
    return nameFieldSchema
}

但是它不起作用。我怎样才能导入这些类型?或者它甚至是可能的?

vxf3dgd4

vxf3dgd41#

如果你已经安装了你提到的types包:

npm install --save-dev @types/google-apps-script

那么你应该能够在global object上使用GoogleAppsScriptnamespace来访问这些类型(不需要import语句),就像你可以访问你显示的值一样(例如BigQuery对象):

const bqQuerySchemaGenerator = (description: string, name: string, type: string): GoogleAppsScript.BigQuery.Schema.TableFieldSchema => {
  const nameFieldSchema = BigQuery.newTableFieldSchema();
  nameFieldSchema.description = description;
  nameFieldSchema.name = name;
  nameFieldSchema.type = type;
  return nameFieldSchema;
};

或者,如果你打算重用任何类型,你也可以给它起别名,这样你就不必每次都输入完整的命名空间路径:

type TableFieldSchema = GoogleAppsScript.BigQuery.Schema.TableFieldSchema;

const bqQuerySchemaGenerator = (description: string, name: string, type: string): TableFieldSchema => {
  const nameFieldSchema = BigQuery.newTableFieldSchema();
  nameFieldSchema.description = description;
  nameFieldSchema.name = name;
  nameFieldSchema.type = type;
  return nameFieldSchema;
};

相关问题