小编Wer*_*oot的帖子

如何从`tsconfig.json` 获取`CompilerOptions`

我正在使用 TypeScript 编译器 API。初始化程序时,我被要求提供一个CompilerOptions对象。我想对CompilerOptions给定的tsconfig.json文件使用 ,但我似乎无法弄清楚获取它的正确方法是什么。

我想我应该使用,parseJsonConfigFileContent但这也需要一个ParseConfigHost. 他们说自己实现很容易,但尤其是方法readDirectory自己实现起来似乎相当复杂。据我所知,您需要返回某个目录中的所有 TypeScript 文件,占 aexcludesincludes.

当然,TypeScript 已经在内部某处这样做了。如何使用默认值readDirectoryParseConfigHost

换句话说:获取CompilerOptions给定 TypeScript 项目的最简单方法是什么?

typescript typescript-compiler-api

9
推荐指数
1
解决办法
1624
查看次数

使用部分密钥进行多键映射搜索/过滤

我的问题类似于部分多键映射的数据结构?.

我有键值对,其中键由三个组件(字符串)组成.

我正在寻找一种数据结构,可以有效地对密钥执行搜索查询,其中查询可以是完整的或部分地指定密钥(省略一个或多个组件).例如:

(x, y, z)
(x, *, *)
(*, y, *)
etc.
Run Code Online (Sandbox Code Playgroud)

密钥的未指定部分可以位于密钥的前部,中部或末端.

我的当前实现(将所有可能的部分键映射到与该部分键匹配的一组值的哈希映射)在插入,删除和更新值时非常慢.

algorithm data-structures

7
推荐指数
1
解决办法
1016
查看次数

如何将Browserify和Google Closure与类型检查结合起来

当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

javascript google-closure-compiler browserify

5
推荐指数
0
解决办法
703
查看次数

AngularJS 1.4 迁移 - ngOptions:是否通过损坏的对象相等性检查进行跟踪?

我希望你们能帮助我阐明自从我们从 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)有关,但我不知何故错过了其中的含义?到底是怎么回事?

提前致谢!

html javascript angularjs ng-options angularjs-ng-model

3
推荐指数
1
解决办法
291
查看次数

运行 Typescript 编译器插件/转换器后进行类型检查

我正在关注有关如何编写 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)

plugins transformer-model typescript

3
推荐指数
1
解决办法
552
查看次数