我正在使用 TypeScript 编译器 API。初始化程序时,我被要求提供一个CompilerOptions对象。我想对CompilerOptions给定的tsconfig.json文件使用 ,但我似乎无法弄清楚获取它的正确方法是什么。
我想我应该使用,parseJsonConfigFileContent但这也需要一个ParseConfigHost. 他们说自己实现很容易,但尤其是方法readDirectory自己实现起来似乎相当复杂。据我所知,您需要返回某个目录中的所有 TypeScript 文件,占 aexcludes和includes.
当然,TypeScript 已经在内部某处这样做了。如何使用默认值readDirectory或ParseConfigHost?
换句话说:获取CompilerOptions给定 TypeScript 项目的最简单方法是什么?
我的问题类似于部分多键映射的数据结构?.
我有键值对,其中键由三个组件(字符串)组成.
我正在寻找一种数据结构,可以有效地对密钥执行搜索查询,其中查询可以是完整的或部分地指定密钥(省略一个或多个组件).例如:
(x, y, z)
(x, *, *)
(*, y, *)
etc.
Run Code Online (Sandbox Code Playgroud)
密钥的未指定部分可以位于密钥的前部,中部或末端.
我的当前实现(将所有可能的部分键映射到与该部分键匹配的一组值的哈希映射)在插入,删除和更新值时非常慢.
当Browserify结合我的JavaScript文件时,结果如下所示:
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
// Including file contents
},{"foo":3}],3:[function(require,module,exports){
// Included file contents
...
Run Code Online (Sandbox Code Playgroud)
带有类型检查的Google Closure Compile(--jscomp_warning = checkTypes)会抱怨s使用一个参数而不是所需的两个参数调用的函数.
我正在取代的定义 s
function s(o,u){
Run Code Online (Sandbox Code Playgroud)
同
/** @param {*=} o @param {*=} u */function s(o,u){
Run Code Online (Sandbox Code Playgroud)
作为预处理步骤.
但是,必须有一个更好的方式.我的问题是:如何将Browserify与Google Closure Compiler结合使用类型检查,而无需查找和替换定义s?
我希望你们能帮助我阐明自从我们从 Angular 1.3 迁移到 Angular 1.4 以来我一直面临的问题。
我创建了一个支持JSFiddle演示来演示这一点
我有一个控制器,其中包含两个实例的列表MyElement,用户可以使用<select>.
还有一个按钮,用于将===所选元素MyElement与列表中的第一个元素进行比较 ( )。此比较的结果将记录到控制台。
使用<select>atrack by element.id来区分 -MyElement实例。
看起来奇怪的是,所选项目永远不等于列表的第一个元素(即使选择了第一个元素)。绑定到的对象ctrl.selectedElement是不同的对象,但具有相同的属性:
NO!
Object {id: 1, description: "First"}
MyElement {id: 1, description: "First"}
Run Code Online (Sandbox Code Playgroud)
当我删除track by element.id 或返回到 Angular 1.3 时,这种行为就会消失(两个元素严格相等,正如我所期望的那样)。
这是一个错误吗?这与fix(ngOptions)有关,但我不知何故错过了其中的含义?到底是怎么回事?
提前致谢!
我正在关注有关如何编写 Typescript 编译器插件/转换器的博客(https://dev.doctorevidence.com/how-to-write-a-typescript-transform-plugin-fc5308fdd943)。
在应用应该引入类型错误的第一个简单转换(在没有该属性的对象上访问的某些属性)之后,我注意到没有显示类型错误。事实上,编译器照常进行。
import * as ts from "typescript";
export const transformerFactory = (
program: ts.Program
): ts.TransformerFactory<ts.SourceFile> => {
return (context: ts.TransformationContext): ts.Transformer<ts.SourceFile> => {
const visitor: ts.Visitor = (node: ts.Node): ts.VisitResult<ts.Node> => {
if (ts.isCallExpression(node) && ts.isIdentifier(node.expression)) {
if (node.expression.escapedText === "someCall") {
return ts.createCall(
ts.createPropertyAccess(node.expression, "nonExisting"),
node.typeArguments,
node.arguments
);
}
}
return ts.visitEachChild(node, visitor, context);
};
return (sf: ts.SourceFile) => ts.visitNode(sf, visitor);
};
};
Run Code Online (Sandbox Code Playgroud)
适用于index.ts:
declare function someCall(...args: any[]): string;
console.log(someCall(1, 2, …Run Code Online (Sandbox Code Playgroud) javascript ×2
typescript ×2
algorithm ×1
angularjs ×1
browserify ×1
html ×1
ng-options ×1
plugins ×1