Javascript add mixin函数的Typescript定义
有没有一种方法可以为下面的mix-in-helper编写类型脚本定义 我在library.js中有这个模式,我想创建library.d.tsJavascript 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
// 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
,函数体被省略了-我更新了示例代码