Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript add mixin函数的Typescript定义_Javascript_Typescript - Fatal编程技术网

Javascript add mixin函数的Typescript定义

Javascript add mixin函数的Typescript定义,javascript,typescript,Javascript,Typescript,有没有一种方法可以为下面的mix-in-helper编写类型脚本定义 我在library.js中有这个模式,我想创建library.d.ts // declaration in `library.js` var mixin = { example: function {} } function addMixin(instance) { instance.example = mixin.example; return example; } // usage in `client.j

有没有一种方法可以为下面的mix-in-helper编写类型脚本定义

我在library.js中有这个模式,我想创建library.d.ts

// declaration in `library.js`
var mixin = {
  example: function {}
}

function addMixin(instance) {
  instance.example = mixin.example;
  return example;
}

// usage in `client.js`
class MyClass {}
let myInstance = addMixin(new MyClass());

一种可能的方法是使用泛型类型参数T声明addMixin,并使用mixin类型将addMixin返回类型声明为of T

为了实现这一点,必须以某种方式声明addMixin参数,以允许分配到
示例
属性-同样,交叉点类型,但这次使用可选的
示例
属性可以实现这一点

然后,您必须为
addMixin
返回值使用类型转换-最好能用某种方式来表示赋值后它总是有一个
example
属性,但是类型转换现在就可以了。(我假设您想从中返回
实例
,问题中的
返回示例
给出了一个关于未定义
示例
的错误)

因此,typescript中的
addMixin
实现可能如下所示

var mixin = {
    example: function () { }
};

function addMixin<T>(instance: T & { example?() }): T & { example() } {
    instance.example = mixin.example;
    return instance as T & { example() };
}
// declaration in library.d.ts
declare function addMixin<T>(instance: T & { example?() }): T & { example() };

// implementation in library.js
var mixin = {
    example: function() {}
};

function addMixin(instance) {
  instance.example = mixin.example;
  return instance;
}


// can be used in client.ts with library.d.ts
// tsc client.ts library.d.ts

class MyClass {}
let myInstance = addMixin(new MyClass());

myInstance.example();
var mixin={
示例:函数(){}
};
函数addMixin(实例:T&{example?()}):T&{example()}{
instance.example=mixin.example;
将实例返回为T&{example()};
}
如果实际的实现是用javascript实现的,并且您只需要声明文件,那么它可以如下所示

var mixin = {
    example: function () { }
};

function addMixin<T>(instance: T & { example?() }): T & { example() } {
    instance.example = mixin.example;
    return instance as T & { example() };
}
// declaration in library.d.ts
declare function addMixin<T>(instance: T & { example?() }): T & { example() };

// implementation in library.js
var mixin = {
    example: function() {}
};

function addMixin(instance) {
  instance.example = mixin.example;
  return instance;
}


// can be used in client.ts with library.d.ts
// tsc client.ts library.d.ts

class MyClass {}
let myInstance = addMixin(new MyClass());

myInstance.example();
//library.d.ts中的声明
声明函数addMixin(实例:T&{example?()}):T&{example()};
//library.js中的实现
变量mixin={
示例:函数(){}
};
函数addMixin(实例){
instance.example=mixin.example;
返回实例;
}
//可以在client.ts和library.d.ts中使用
//tsc client.ts library.d.ts
类MyClass{}
让myInstance=addMixin(新的MyClass());
myInstance.example();

一种可能的方法是使用泛型类型参数T声明addMixin,并使用mixin类型将addMixin返回类型声明为从T开始

为了实现这一点,必须以某种方式声明addMixin参数,以允许分配到
示例
属性-同样,交叉点类型,但这次使用可选的
示例
属性可以实现这一点

然后,您必须为
addMixin
返回值使用类型转换-最好能用某种方式来表示赋值后它总是有一个
example
属性,但是类型转换现在就可以了。(我假设您想从中返回
实例
,问题中的
返回示例
给出了一个关于未定义
示例
的错误)

因此,typescript中的
addMixin
实现可能如下所示

var mixin = {
    example: function () { }
};

function addMixin<T>(instance: T & { example?() }): T & { example() } {
    instance.example = mixin.example;
    return instance as T & { example() };
}
// declaration in library.d.ts
declare function addMixin<T>(instance: T & { example?() }): T & { example() };

// implementation in library.js
var mixin = {
    example: function() {}
};

function addMixin(instance) {
  instance.example = mixin.example;
  return instance;
}


// can be used in client.ts with library.d.ts
// tsc client.ts library.d.ts

class MyClass {}
let myInstance = addMixin(new MyClass());

myInstance.example();
var mixin={
示例:函数(){}
};
函数addMixin(实例:T&{example?()}):T&{example()}{
instance.example=mixin.example;
将实例返回为T&{example()};
}
如果实际的实现是用javascript实现的,并且您只需要声明文件,那么它可以如下所示

var mixin = {
    example: function () { }
};

function addMixin<T>(instance: T & { example?() }): T & { example() } {
    instance.example = mixin.example;
    return instance as T & { example() };
}
// declaration in library.d.ts
declare function addMixin<T>(instance: T & { example?() }): T & { example() };

// implementation in library.js
var mixin = {
    example: function() {}
};

function addMixin(instance) {
  instance.example = mixin.example;
  return instance;
}


// can be used in client.ts with library.d.ts
// tsc client.ts library.d.ts

class MyClass {}
let myInstance = addMixin(new MyClass());

myInstance.example();
//library.d.ts中的声明
声明函数addMixin(实例:T&{example?()}):T&{example()};
//library.js中的实现
变量mixin={
示例:函数(){}
};
函数addMixin(实例){
instance.example=mixin.example;
返回实例;
}
//可以在client.ts和library.d.ts中使用
//tsc client.ts library.d.ts
类MyClass{}
让myInstance=addMixin(新的MyClass());
myInstance.example();

Oh十字路口正是我需要的。我无法更改library.js-这在定义文件中会是什么样子?一般来说,函数声明看起来是一样的,前面有
declare
,函数体被省略了-我更新了示例codeOh intersection,这正是我需要的。我无法更改library.js-这在定义文件中会是什么样子?一般来说,函数声明看起来是一样的,前面是
declare
,函数体被省略了-我更新了示例代码