首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何获取数组的解析类型参数(tsc编译器API)

获取数组的解析类型参数可以使用tsc编译器API中的getResolvedTypeReferenceDirectives()方法。该方法返回一个解析类型引用指令的数组,可以通过遍历该数组来获取解析类型参数。

解析类型参数是指在TypeScript中使用尖括号语法<T>来指定泛型类型参数。例如,Array<number>中的number就是解析类型参数。

以下是获取数组的解析类型参数的示例代码:

代码语言:txt
复制
import * as ts from 'typescript';

function getArrayResolvedTypeParameters(sourceFile: ts.SourceFile): string[] {
  const resolvedTypeParameters: string[] = [];

  function visitNode(node: ts.Node) {
    if (ts.isTypeReferenceNode(node)) {
      const typeArguments = node.typeArguments;
      if (typeArguments) {
        typeArguments.forEach((typeArg) => {
          if (ts.isTypeReferenceNode(typeArg)) {
            resolvedTypeParameters.push(typeArg.typeName.getText());
          }
        });
      }
    }

    ts.forEachChild(node, visitNode);
  }

  visitNode(sourceFile);

  return resolvedTypeParameters;
}

// 示例代码中的sourceCode是待解析的TypeScript代码
const sourceCode = `
  const arr: Array<number> = [1, 2, 3];
`;

const sourceFile = ts.createSourceFile('example.ts', sourceCode, ts.ScriptTarget.ESNext, false);
const resolvedTypeParameters = getArrayResolvedTypeParameters(sourceFile);

console.log(resolvedTypeParameters); // 输出: ['number']

上述示例代码中,我们首先导入了tsc编译器API的ts模块。然后定义了一个getArrayResolvedTypeParameters()函数,该函数接收一个sourceFile参数,表示待解析的TypeScript代码文件。在函数内部,我们使用tsc编译器API的isTypeReferenceNode()方法来判断节点是否为类型引用节点,并通过遍历节点的typeArguments属性来获取解析类型参数。最后,我们调用getArrayResolvedTypeParameters()函数,并传入待解析的TypeScript代码,得到解析类型参数的数组。

需要注意的是,示例代码中的tsc编译器API是TypeScript官方提供的编译器API,用于操作和分析TypeScript代码。在实际使用中,需要安装tsc编译器API的相关依赖,并将示例代码集成到自己的项目中。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

深度解析Java可变参数类型以及与数组区别

这篇文章主要介绍了Java方法可变参数类型,通过实例对Java中可变参数类型进行了较为深入分析,需要朋友可以参考下。 ? Java方法中可变参数类型是一个非常重要概念,有着非常广泛应用。...:可变参数类型,也称为不定参数类型。...看到这里估计都能明白,这个不定长参数其实和数组参数挺像。事实上,也确实是这么回事儿。...编译器会在悄悄地把这最后一个形参转化为一个数组形参,并在编译出class文件里作上一个记号,表明这是个实参个数可变方法。...其实对于第二段代码而言,编译器并不知道什么可变不可变,在它看来,需要定义一个dealArray(int, int, int)类方法。所以,自然就无法去匹配数组参数dealArray方法了。

70320

【TS】612- 了不起 tsconfig.json 指南

为什么使用 tsconfig.json 通常我们可以使用 tsc 命令来编译少量 TypeScript 文件: /* 参数介绍: --outFile // 编译后生成文件名称 --target...$ tsc 另外也可以为 tsc 命令指定参数 --project 或 -p 指定需要编译目录,该目录需要包含一个 tsconfig.json 文件,如: /* 文件目录: ├─src/...umd模块 "moduleResolution": "node", // 模块解析策略,ts默认用node解析策略,即相对方式导入 "baseUrl": "./", // 解析非相对模块基地址...包含 3 个子属性: enable : 布尔类型,是否开启自动引入库类型定义文件(.d.ts),默认为 false; include : 数组类型,允许自动引入库名,如:["jquery", "lodash..."]; exculde : 数组类型,排除库名。

2.1K30
  • 了不起 tsconfig.json 指南

    为什么使用 tsconfig.json 通常我们可以使用 tsc 命令来编译少量 TypeScript 文件: /* 参数介绍: --outFile // 编译后生成文件名称 --target...$ tsc 另外也可以为 tsc 命令指定参数 --project 或 -p 指定需要编译目录,该目录需要包含一个 tsconfig.json 文件,如: /* 文件目录: ├─src/...umd模块 "moduleResolution": "node", // 模块解析策略,ts默认用node解析策略,即相对方式导入 "baseUrl": "./", // 解析非相对模块基地址...包含 3 个子属性: enable : 布尔类型,是否开启自动引入库类型定义文件(.d.ts),默认为 false; include : 数组类型,允许自动引入库名,如:["jquery", "lodash..."]; exculde : 数组类型,排除库名。

    3K10

    了不起 tsconfig.json 指南

    为什么使用 tsconfig.json 通常我们可以使用 tsc 命令来编译少量 TypeScript 文件: /* 参数介绍: --outFile // 编译后生成文件名称 --target...$ tsc 另外也可以为 tsc 命令指定参数 --project 或 -p 指定需要编译目录,该目录需要包含一个 tsconfig.json 文件,如: /* 文件目录: ├─src/...umd模块 "moduleResolution": "node", // 模块解析策略,ts默认用node解析策略,即相对方式导入 "baseUrl": "./", // 解析非相对模块基地址...,允许自动引入库名,如:"jquery", "lodash"; exculde  : 数组类型,排除库名。...这是因为 this 隐式具有 any 类型,如果没有指定类型注解,编译器会提示“"this" 隐式具有类型 "any",因为它没有类型注释。”。

    2.6K42

    【JS】547- 200行JS代码,带你实现代码编译器(人人都能学会)

    编译器三个核心阶段.png 目前绝大多数现代编译器工作流程基本类似,包括三个核心阶段: 「解析(Parsing)」 :通过词法分析和语法分析,将原始代码字符串解析成「抽象语法树(Abstract Syntax...三、编译器实现 本文将通过 「The Super Tiny Compiler[3]」 源码解读,学习如何实现一个轻量编译器,最终「实现将下面原始代码字符串(Lisp 风格函数调用)编译成 JavaScript...// 语法分析器 参数:词法单元数组tokens function parser(tokens) { let current = 0; // 设置当前解析词法单元索引,作为游标 // 递归遍历...接下来通过前面原始需求代码,测试编译器效果如何: const add = (a, b) => a + b; const subtract = (a, b) => a - b; const source...4.1 Webpack 构建流程分析 从启动构建到输出结果一系列过程: 「初始化参数解析 Webpack 配置参数,合并 Shell 传入和 webpack.config.js 文件配置参数,形成最后配置结果

    2.6K40

    【图文详解】200行JS代码,带你实现代码编译器(人人都能学会)

    三、编译器实现 本文将通过 The Super Tiny Compiler 源码解读,学习如何实现一个轻量编译器,最终实现将下面原始代码字符串(Lisp 风格函数调用)编译成 JavaScript 可执行代码...[语法分析器工作流程.png] // 语法分析器 参数:词法单元数组tokens function parser(tokens) { let current = 0; // 设置当前解析词法单元索引...接下来通过前面原始需求代码,测试编译器效果如何: const add = (a, b) => a + b; const subtract = (a, b) => a - b; const source...4.1 Webpack 构建流程分析 从启动构建到输出结果一系列过程: 初始化参数 解析 Webpack 配置参数,合并 Shell 传入和 webpack.config.js 文件配置参数,形成最后配置结果...The Super Tiny Compiler》 《有史以来最小编译器源码解析》 《Angular 2 JIT vs AOT》

    3.1K00

    【译】2019年开始使用Typescript

    TypeScript在js开发者中这么受喜爱原因是:在你运行代码前,添加到javascript中类型有助你发现错误(代码)。TypeScript编译器提供错误可以很好引导你如何修复代码错误。...array TypeScript中有两种书写数组类型方式。第一种是[]后缀在需要查找数组元素类型。...但是,如果编写其他人可以使用第三方公共API,就要使用接口类型了。 如果你想了解更多关于type alias和interface比较的话,我推荐你看Martin Hochel这篇文章。...T,它对应于传递给fillArray函数第二个参数类型。...传递给fillArray函数第二个参数是一个字符串,因此创建数组将其所有元素设置为具有字符串类型。 应该注意是,按照惯例,单个(大写)字母用于泛型类型(比如:T或K)。

    2.2K20

    2019年开始使用Typescript

    TypeScript在js开发者中这么受喜爱原因是:在你运行代码前,添加到javascript中类型有助你发现错误(代码)。TypeScript编译器提供错误可以很好引导你如何修复代码错误。...array TypeScript中有两种书写数组类型方式。第一种是[]后缀在需要查找数组元素类型。...但是,如果编写其他人可以使用第三方公共API,就要使用接口类型了。 如果你想了解更多关于type alias和interface比较的话,我推荐你看Martin Hochel这篇文章。...T,它对应于传递给fillArray函数第二个参数类型。...传递给fillArray函数第二个参数是一个字符串,因此创建数组将其所有元素设置为具有字符串类型。 应该注意是,按照惯例,单个(大写)字母用于泛型类型(比如:T或K)。

    88020

    这样入门 js 抽象语法树(AST),从此我来到了一个新世界

    Rollup 是一个不错选择,但是我(自虐般地)选择了 Typescript 自带编译器 tsc ,然后我就开始我填坑之旅~ tsc 遇到坑 在使用 tsc 编译我代码时,对我目前来说,...有了这个网站你就能实时地去查看解析之后 AST 是什么样子,以及它们类型是什么,这在之后写代码去对 AST 做修改特别有用!因为你可以明确自己想要修改地方是哪里。 ?...当你使用过它一些 api 后有了直观感觉,再去阅读也不迟~ AST 类型大全 @babel/types 这是一本 AST 类型词典,如果我们想要生成一些新代码,也就是要生成一些新节点,按照语法规则...a ArrayExpression 数组表达式 通常指一个数组,比如 [1, 2, 3] StringLiteral 字符型字面量 通常指字符串类型字面量,比如 const a = '1' 中 '1...version 作用:定义命令程序版本号; 用法示例:.version('0.0.1', '-v, --version') ; 参数解析: 第一个参数,版本号 ; 第二个参数,自定义标志 <可省略

    1.9K21

    TypeScript 2.6 来了!

    逆变参数类型,使用 --strictFunctionTypes 当比较签名时候,那些使你类型 callable 或 constructable – TypeScript 已经考虑到这两个返回类型参数类型...如果 TypeScript 比较各函数参数逆变,它会使所有 T 上 数组_不变_,因为 T 发生在协变和逆变位置。换句话说, 数组 不会赋值给 数组,这对于许多场景来说可能是很有挑战性。...在这种新 严格模式下,不来自方法任何函数类型有相对比较严格逆变参数。...仅仅通过适当语言标志 作为参数传给 TypeScript 编译器 --locale 选项。如果该语言被支持,TypeScript将提供一个翻译版本。...关于以后 获取更多完整关于 TypeScript 2.6 图片,您可以访问 What’s New in TypeScript wiki 页面。

    1.1K20

    会写 TypeScript 但你真的会 TS 编译配置吗?

    1.2 什么是 tsctsc 全称是 TypeScript Compiler,也就是将 TypeScript 转码为 JavaScript 代码编译器。...“大”字段,其值类型是“对象”,因此包含了很多用于描述编译器功能子字段,其子字段功能如下: (1). target target 字段指明经过 TSC 编译后 ECMAScript 代码语法版本,...例如我们代码会使用到浏览器中一些对象 window、document,这些全局对象 API 对于 TypeScript Complier 来说是不能识别的: lib 未显示引入 DOM 会提示类型错误...举个,遇到 import {a} from 'a-lib'; 这样模块引入代码应该如何去(解析)查找到对应模块文件。...TSC 编译结果存储到内存中 但是如果开启了 declaration,则会将 TSC 解析得到 *.d.ts 文件输出到指定目录。

    3.7K41

    TypeScript必知三部曲(一)TypeScript编译方案以及IDE对TS类型检查

    对于编译器这部分来说,除了上面我们尝试过tsc编译器,是否还存在其他编译器呢?答案是肯定:babel。...插件总共分为两种: 当我们添加 语法插件 之后,在解析这一步就使得 babel 能够解析更多语法。...(顺带一提,babel 内部使用解析类库叫做 babylon,并非 babel 自行开发) 举个简单例子,当我们定义或者调用方法时,最后一个参数之后是不允许增加逗号,如 callFoo(param1...那么我们如何使用babel将ts代码编译器es6代码呢?...接下来剩余两部分,将分别介绍webpack如何编译打包基于TypeScript项目以及TSX是如何进行类型检查。

    70320

    React、TypeScript、NodeJS 和 MongoDB 搭建 Todo App

    API 路由 创建服务器 用 React 和 TypeScript 创建客户端 启动 创建 Todo 类型API 获取数据 创建组件 添加 Todo 表单 展示 Todo 获取和展示数据 资源...我们还有一个 app.ts,它是服务器入口。控制器、类型和路由也在它们各自以它们命名文件夹中。 现在,我们需要配置 tsconfig.json,使编译器运行我们首选项。...在前面创建 Todo 模块帮助下,我们现在可以从 MongoDB 获取数据并返回 Todo 数组。...然后,我们用相同接口定义 TodoProps ,组件会接受它并渲染数据。 现在我们已经定义了类型——现在让我们开始从 API 获取数据。...然后,我们传递 ITodo 类型数组给 useState 并且把它初始化为空数组

    17K30

    前端打包、编译和优化

    未来计划发布独立 CLI、插件 API,并支持 Svelte 和 Vue 等其他框架。...TSCTSC(TypeScript Compiler) 是 TS 语言官方编译器,最初 TS 语言只能使用 TSC 进行编译,随着 Babel 等工具也相继支持编译 TS,你可能有疑问,他们之间有什么区别吗...答案是有的, 相对于 Babel,TSC 有如下 优势:可以进行类型检查;可以识别所有的类型并生成 .d.ts 类型文件;原因在于 Babel 是单个文件编译,不会解析其他文件信息,而 TSC 类型检查需要拿到整个工程类型信息...通过配置 target 也可以让 TSC 编译出低版本浏览器支持代码,但存在一些 缺点:对一些新语法缺乏支持,如提案阶段语法;对于 ES API 和 ES 实例/静态方法无法解析,需要单独添加 polyfill...;综上,现在前端 TS 项目一般还是会使用 Babel 做编译,使用 TSC类型检查。

    2.1K61

    你不知道 「 import type 」

    大概是因为 babel 团队并不想像 TypeScript 那样, 在相同类型解析过程中进行构建,只是为了删除这些类型吧。...tsc类型检查时,当监测到 isolatedModules 是开启,就会报类型错误。 如果错误未解决,将影响独立处理文件编译工具(babel)。...从Node 角度来看,Node 做模块解析时,会发现 types.js 中引入文件是空,报错:文件不存在。 如截图所示,tsc 类型检查过程立即将这些模糊重新导出报告为错误。 2....显式类型导入,显式类型导出 这次,我们明确地将中类型重新导出lib-import-export.ts。 打开 isolatedModules时,此代码将通过 tsc 类型检查。...现在,编译器(无论是tsc,babel还是其他)都将能够查看单个文件,并取消导入或导出(如果它是TypeScript类型)。

    4.3K61

    tsconfig.json配置项备忘

    当我们使用 tsc 命令编译项目,且没有指定输入文件时,编译器就会去查找 tsconfig.json 文件。如果在当前目录没找到,就会逐级向父文件夹查找。...我们也可以通过在 tsc 命令中加上–project 参数,来指定一个包含 tsconfig.json 文件目录。...可以配置一个数组列表,里面包含指定文件相对或绝对路径。...": "dist", } } 重点配置项是 compilerOptions ,它决定了tsc如何编译目标文件,生成到什么地方,它常用配置项如下: target target 用于指定编译之后版本目标...接下来是模块解析相关: moduleResolution moduleResolution 用于选择模块解析策略,有"node"和"classic"两种类型,我们在讲模块解析时候已经讲过了。

    62610

    TypeScript 工程化实践方案

    TypeScript 提供了很多不同功能编译选项,既可以通过在 tsc 命令后跟随参数这种形式,直接编译 .ts 文件,也可以通过配置 tsconfig.json 文件中 compilerOptions...ts编译器可以根据这个配置文件里信息对代码进行编译。这个配置文件里可以写很多配置,接下来我们要研究就是它配置选项。...moduleResolution": "node", /* 选择模块解析策略,有'node'和'classic'两种类型 */ "experimentalDecorators": true, /...", /* 工作根目录 */ "types": [], /* 指定引入类型声明文件,默认是自动引入所有声明文件,一旦指定该选项,则会禁用自动引入,改为只引入指定类型声明文件,如果指定空数组[...include 是一个数组列表,写入待编译文件路径,支持 glob 匹配模式。 exclude 也是一个数组列表,写入排除某些文件路径,这些文件排除于待编译列表,支持 glob 匹配模式。

    87130
    领券