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

如何获取数组的解析类型参数(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方法了。

71220

【TypeScript 编程】001-002 第 1 章 导言 与 第 2 章 TypeScript 概述

第三步:编译器把 AST 转换成字节码; 第四步:字节码再传给运行时程序计算,得到最终结果。 概述:运行程序就是让运行时计算由编译器从源码解析得来的 AST 生成的字节码。...1.4 TypeScript 如何让代码更安全 TypeScript 编译器生成 AST 之后,真正运行代码之前,TypeScript 会对代码做类型检查。...2.3 JavaScript VS TypeScript 类型系统特性 JavaScript TypeScript 类型是如何绑定的? 动态 静态 是否自动转换类型?...如果执行无效的操作,例如计算一个数与一个数组的和,JavaScript 将根据一系列规则判断你的真正意图!...{ "compilerOptions": { "lib": ["ES2015"], // TSC 假定运行代码的环境有哪些 API ?

6710
  • 【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 : 数组类型,排除的库名。

    4.2K10

    了不起的 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.7K42

    【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.2K00

    【译】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)。

    88320

    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 什么是 tsc ? tsc 的全称是 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.8K41

    这样入门 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') ; 参数解析: 第一个参数,版本号 ; 第二个参数,自定义标志 <可省略

    2K21

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

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

    91020

    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.2K61

    你不知道的 「 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"两种类型,我们在讲模块解析的时候已经讲过了。

    64310
    领券