小编zer*_*oin的帖子

Typescript 1.8模块:从文件夹导入所有文件

我正在使用Typescript构建一个包含100个独立ts文件的大型库.以前我使用导出模块XXX(稍后重命名为导出命名空间XXX)用于我的所有类,但正如书中所说,这不是推荐的方式,我应该使用import.

所以我尝试导入.这工作得很好:

import * as mylib from "./source/source.ts";
Run Code Online (Sandbox Code Playgroud)

但由于我有100个文件,我不想为所有这些文件添加这样的行.我想通过mylib变量访问所有类.

所以我尝试了这个:

import * as mylib from "./source/";
Run Code Online (Sandbox Code Playgroud)

但是一旦我这样做,我得到:找不到模块'./source/'

有没有办法从一个包含多行文件的文件夹中导入所有类?

typescript typescript1.8

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

Typescript:导出命名空间中的所有函数

让我说我有一个打字稿文件Utils与一堆导出函数:

export function utilOne(){}
export function utilTwo(){}
Run Code Online (Sandbox Code Playgroud)

我将index.d.ts文件添加到此文件夹中,我从Utils文件中导出*:

export * from './Utils';
Run Code Online (Sandbox Code Playgroud)

在我的其他类中,我想通过utils命名空间访问函数utilOne和utilTwo,如:

utils.utilOne();
Run Code Online (Sandbox Code Playgroud)

我知道我可以像这样导入它:

import * as utils from "./Utils";
Run Code Online (Sandbox Code Playgroud)

但是,由于我将使用utils很多,我希望能够在命名空间中导出utils,例如:

export {* as utils} from './Utils';   // this doesn't work
Run Code Online (Sandbox Code Playgroud)

然后使用:

import * from "./Utils";
Run Code Online (Sandbox Code Playgroud)

但是导出{*as utils}不起作用.我可以把Utils的所有功能都放到模块"utils"中并导出它,但我不确定这是不是一个好习惯.有没有正确的方法来做到这一点?

typescript

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

获取变量的类型并创建此类型的新实例

假设我有一个带有一些属性dataItems的基类,它是DataItem的数组:

export class BaseClass{
   dataItems:DataItems[];
}
Run Code Online (Sandbox Code Playgroud)

然后我有几个扩展BaseClass的类,它们的dataItems属性是扩展DataItems的某个类的数组:

export class BetterClass extends BaseClass{
   dataItems:BetterDataItems[];
}

export class BestClass extends BaseClass{
   dataItems:BestDataItems[];
}
Run Code Online (Sandbox Code Playgroud)

现在我想在BaseClass中添加一个方法,它创建dataItems并将它们添加到数组中.是否可以在BaseClass中完成所有这些操作?我需要创建BetterDataItems或BestDataItems的实例,具体取决于使用的类.

目前我只是补充说:

dataItemType: typeof DataItem; 
Run Code Online (Sandbox Code Playgroud)

属性到BaseClass并在扩展BaseClass的每个类中使用适当的数据项类型覆盖此变量:

在BetterClass中:

dataItemType: typeof BetterDataItem = BetterDataItem;
Run Code Online (Sandbox Code Playgroud)

在BestClass:

dataItemType: typeof BestDataItem = BestDataItem;
Run Code Online (Sandbox Code Playgroud)

然后,在BaseClass中我这样做:

var dataItem = new this.dataItemType();
Run Code Online (Sandbox Code Playgroud)

这很好但我的问题是 - 是否可以避免拥有dataItemType财产?我可以找到一种类型的dataItems数组并创建一个新实例吗?

谢谢!

class typescript

8
推荐指数
1
解决办法
704
查看次数

只需添加和删除SVG元素,Chrome就会泄漏内存

继续这个问题:任务管理器显示内存泄漏,但Heap快照没有

我设法创建了一个非常简单的例子,它说明了这个漏洞,这里是完整的源代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>svg test</title>



        <script type="text/javascript">

            var svg;
            var interval;
            var svg;

            window.onload = function(){
                createSVG();
                start();
            }

            function start(){
                interval = setInterval(createElements, 100);                
            }

            function createSVG(){

                var div = document.getElementById("svgdiv");
                div.innerHTML = "";

                svg = createSvgElement("svg");
                svg.style.position = "absolute";
                svg.style.width = "600px";
                svg.style.height = "500px";
                svg.setAttribute("version", "1.1");
                div.appendChild(svg);
                createElements();               
            }


            function createElements(){

                removeElements();

                for(var i = 0; i < 500; i++){
                    var element = createSvgElement("circle"); …
Run Code Online (Sandbox Code Playgroud)

javascript svg memory-leaks

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

检查对象(或只是一个类)是否具有属性

让我们说我有一节课:

module MyModule {
    export class MyClass {
       x:number;
       y:number;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我有一个字符串,"x".如何检查MyClass是否具有属性"x"?

如果我创建一个MyClass实例然后执行:

myClassInstance.hasOwnProperty("x");
Run Code Online (Sandbox Code Playgroud)

它返回false,除非x设置了默认值.但我不想为每个属性设置默认值.如果我甚至可以在不创建MyClass实例的情况下做到这一点,那将是最好的.

typescript

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

Typescript,index.d.ts和webpack:找不到模块错误

我按照本教程使用webpack创建了Typescript项目.由于我有很多模块,我将index.d.ts添加到我的src/components文件夹中,我将导出所有模块:

export {Module1} from "./Module1";
export {Module2} from "./Module2";
export {Module3} from "./Module3";
Run Code Online (Sandbox Code Playgroud)

我将index.d.ts添加到tsconfig.json文件中:

"files": [
    "./src/components/index.d.ts"
]
Run Code Online (Sandbox Code Playgroud)

然后,在index.tsx中,在src文件夹中,我导入:

import * as MyModule from "./components/";
Run Code Online (Sandbox Code Playgroud)

代码提示工作正常,所以我认为所有路径都可以.但是,当我运行webpack时,我收到此错误:

找不到模块:错误:无法解析目录'./components'

据我所知,webpack找不到这个index.d.ts文件.我尝试将d.ts添加到webpack.config.js扩展,如此处所述,但后来我收到了不同的错误消息.我错过了什么吗?

typescript

6
推荐指数
2
解决办法
2265
查看次数

任务管理器显示内存泄漏,但堆快照不显示

我每5秒运行一次大量的JavaScript,任务管理器显示内存使用量不断增加.但是Heap快照没有.如果我停止脚本,大约半分钟两分钟后内存就会被清除.

更新:

如果我长时间离开脚本,内存会一直增加,直到浏览器崩溃.我还尝试运行chrome dev工具的时间线测试,它们也没有显示内存使用量的增加,与Heap快照相同.所以我想这是一种泄漏,但我无法理解泄漏的是什么.

另一件我无法确认的事情,因为我无法安装以前的Chrome版本,因为我不记得之前发生的事情(<24个Chrome版本).IE10在不增加内存的情况下运行此测试.这可能是新Chrome的问题吗?

javascript memory-leaks

5
推荐指数
1
解决办法
1799
查看次数

Typescript+webpack:typescript 没有为 index.d.ts 发出任何输出

我按照本教程成功设置了 typescript+webpack(无反应)。一切都很好,直到我将 index.d.ts 文件添加到我的组件文件夹中,我用它来导出我的所有模块,例如:

export * from "./MyClass1";
export * from "./MyClass2";
export * from "./MyClass2";
Run Code Online (Sandbox Code Playgroud)

然后我导入它:

import * as MyLib from "./components";
Run Code Online (Sandbox Code Playgroud)

代码提示和一切在 sublime 编辑器中正常工作。

最初,当我运行它时,我有:

无法解析“文件”或“目录”。/components

所以我在 webpack.config.js 的扩展中添加了 d.ts:

 resolve: {
        extensions: ["", ".webpack.js", ".web.js", ".ts", ".tsx", ".js", ".d.ts"]
    },
Run Code Online (Sandbox Code Playgroud)

现在,当我运行 webpack 时,出现此错误:

Typescript 没有为 [...]\index.d.ts 发出任何输出

我应该如何解决这个问题?

typescript

5
推荐指数
2
解决办法
1万
查看次数

获取TypeScript中的扩展类列表

我有:

classA 
classB extends ClassA
classC extends ClassB
Run Code Online (Sandbox Code Playgroud)

我在classC上创建了对象:

var myClassC= new classC();
Run Code Online (Sandbox Code Playgroud)

ClassA有这个方法:

public get className(): string {
    var funcNameRegex = /function (.{1,})\(/;
    var results = (funcNameRegex).exec(this["constructor"].toString());
    return (results && results.length > 1) ? results[1] : "";
}
Run Code Online (Sandbox Code Playgroud)

如果我调用myClassC.getClassName(),则返回"ClassC"字符串;

我需要的是获得基类的所有类的列表:ClassC,ClassB,ClassA.有没有办法做到这一点?

typescript

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