首页
学习
活动
专区
工具
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方法了。

71120

【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 ?

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

    4K10

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

    这样入门 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 但你真的会 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

    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必知三部曲(一)TypeScript编译方案以及IDE对TS的类型检查

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

    89120

    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

    你不知道的 「 import type 」

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

    4.3K61

    前端打包、编译和优化

    未来计划发布独立的 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

    tsconfig.json配置项备忘

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

    64310
    领券