相关疑难解决方法(0)

什么是Typescript中的new()?

new()这里的官方文档中遇到了关于泛型的问题.

这是代码上下文:

function create<T>(c: { new(): T; } ): T {
    return new c();
}
Run Code Online (Sandbox Code Playgroud)

上面的代码被转换为以下JavaScript代码:

function create(c) {
    return new c();
}
Run Code Online (Sandbox Code Playgroud)

new()是JavaScript中的非法语法.TypeScript是什么意思?

此外,什么{new(): T; }意思?我知道它必须是一种类型,但如何?

javascript typescript

16
推荐指数
2
解决办法
7122
查看次数

打字稿多重继承解决方法?

我正在尝试发现一种将多个接口组合成一个抽象类的模式.目前我可以通过"implements"组合多个接口,但接口不能声明构造函数.当我必须引入一个构造函数时,我被迫使用一个抽象类.当我使用抽象类时,我必须重新声明整个复合接口!当然我错过了什么?

interface ILayerInfo {
    a: string;
}

interface ILayerStatic {
    b(): string;
}

class Layer implements ILayerInfo, ILayerStatic {
    constructor(info: ILayerInfo);
    a: string;
    b(): string;
}
Run Code Online (Sandbox Code Playgroud)

答案:使用'new':

interface Layer extends ILayerInfo, ILayerStatic {
    new(info: ILayerInfo);
}

// usage: new Layer({ a: "" });
Run Code Online (Sandbox Code Playgroud)

abstract-class multiple-inheritance typescript

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

打字稿界面中的“构造函数”

我从正在使用的库中收到以下界面:

export interface LatLng {
  constructor(lat: number, lng: number): void;
  lat(): number;
  lng(): number;
}
Run Code Online (Sandbox Code Playgroud)

如何创建此类的实现?(我需要一个测试模型)一个自然的实现,其构造函数定义为:

export class LatLngImpl implements LatLng {
  constructor(private _lat: number, private _lng: number) {  }
Run Code Online (Sandbox Code Playgroud)

无法编译:

类“ LatLngImpl”错误地实现了接口“ LatLng”。属性“构造函数”的类型不兼容。类型“功能”不能分配给类型“(纬度:数字,lng:数字)=>>无效”。类型'Function'不提供签名'(lat:number,lng:> number):void'的匹配项

我读过有关打字稿中的构造函数接口的信息,但我认为它不适用于此处。

编辑:

我不需要理解的是constructor()接口中的此声明。具有构造函数签名的接口使用new ()语法。

typescript

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

与构造签名的接口不是类型检查

我一直在使用TypeScript中的构造签名接口,当下面的键入检查失败时,我变得有点困惑:

class Foo {
    constructor () {
    }
}

interface Bar {
    new(): Bar;
}

function Baz(C : Bar) {
    return new C()
}

var o = Baz(Foo);
Run Code Online (Sandbox Code Playgroud)

类型错误是:

提供的参数与调用目标的任何签名都不匹配:构造类型'new()=> Foo'和'Bar'的签名不兼容:类型'Bar'需要构造签名,但Type'Foo'缺少一个(C:Bar) )=>吧

Foo的构造函数的类型是()=> Foo,这就是我认为Bar所说的.我在这里错过了什么吗?

typescript

10
推荐指数
2
解决办法
9319
查看次数

类型X不是'构造函数类型'(TS2507)

在设计定义文件时,我遇到了这个错误(TS2507).

如何将类型指定为"构造函数类型"?

typescript typescript1.6

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

构造函数不提供新签名的匹配项

在这种情况下,我遇到了“编译”问题:

interface IDataObjectConstructor {
    new (objJSON?: any): myDataObject;
}

class myDataObject implements IDataObjectConstructor {
    constructor(objJSON: any = null) {
        for (var prop in objJSON) {
            this[prop] = objJSON[prop];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它说:

类“ myDataObject”错误地实现了接口“ IDataObjectConstructor”。

类型'myDataObject'不提供签名'new(objJSON ?: any):myDataObject'的匹配项

最后,我想像这样使用此对象:

class viewModelList<T extends myDataObject>{
    item: T;
    constructor(itemType: T) { this.item = itemType; }

    itemBuilder(json?) { return new this.item(json); }
}

class derivedDataObject extends myDataObject{
    constructor(objJSON: any = null) { super(objJSON); }
}

class derivedViewModelList extends viewModelList<derivedDataObject>{

    constructor() { super(derivedDataObject); }
} …
Run Code Online (Sandbox Code Playgroud)

typescript

9
推荐指数
2
解决办法
6819
查看次数

typescript:从模块导入默认导出

我有以下定义类型文件:

// index.d.ts
declare module 'Transformer' {
  class EditableElement {
      constructor(target: SVGPoint);
  }
  export = EditableElement;
}
Run Code Online (Sandbox Code Playgroud)

我想导入EditableElement.但是当我写下面这一行时:

import {EditableElement} from 'Transformer';
Run Code Online (Sandbox Code Playgroud)

我收到下一个错误:

模块"Transformer"解析为非模块实体,无法使用此构造导入.

我怎么能导入这个EditableElement课程?实际上,我只是想利用那个班级.我不希望该import指令在我的代码中具有附带效果.我只是想用它:'(

import default export typescript

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

new(... args)=> T语法

在函数参数上遇到了以下类型的注释:

typeFilter : new(...args) => T
Run Code Online (Sandbox Code Playgroud)

where T是函数的泛型参数.

new(...args)在这种情况下意味着什么,它在哪里记录?

typescript

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

元类在 Typescript 中是不可能的吗

例如,以下不会编译(链接到打字稿游乐场示例)

declare class ClassFactory {
    constructor();
    new(): any;
}

const User = new ClassFactory();
const user = new User();
Run Code Online (Sandbox Code Playgroud)

结果错误:

Cannot use 'new' with an expression whose type lacks a call or construct signature.
Run Code Online (Sandbox Code Playgroud)

我需要额外的注释吗?我如何声明一个元类?我假设它new(): any;被视为类上的原型方法,因此是实例构造模式。

编辑:固定链接

typescript

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

在 TypeScript 中通过其类型名称实例化抽象派生类

我正在用 TypeScript 2.6 编写一些图形代码,但在继承和通用代码方面我有一个小障碍:

abstract class Series { /**/ }

class LineSeries    extends Series { /**/ }
class BarSeries     extends Series { /**/ }
class ScatterSeries extends Series { /**/ }

class Chart {
  private seriesArray: Series[] = [];

  constructor(series: Series[]) {
    let seriesType: typeof Series = null;

    switch (series.SeriesType) {
      case SeriesType.LineSeries:
        seriesType = LineSeries;
        break;
      case SeriesType.BarSeries:
        seriesType = BarSeries;
        break;
      case SeriesType.ScatterSeries:
        seriesType = ScatterSeries;
        break;
      default:
        throw "Unsupported series type";
    }

    for (let i = 0; …
Run Code Online (Sandbox Code Playgroud)

inheritance abstract-class typescript typescript2.6

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