interface Counters {
(start:number):string,
interval:number,
reset():void;
}
let Demoter:Counters =function (start:number) {
} as Counters
Demoter.interval = 123;
Demoter.reset = function () {
}
console.dir('Demoter:',Demoter);
//加入了泛型之后就出了一些问题是不是不能这样定义接口?
interface Countere<T> {
(start: T): string;
interval: T;
reset(): void;
}
function getCounter(): Countere<number> {
let counter = function (start: number) { };
//let counter = <Countere>function (start: number) { };//加上泛型说明下面不报错有报泛型类型“Countere<T>”需要 1 个类型参数。加一个类型参数我也不知道写的对不对,没看见文档上给例子,给<Countere><number>又开始报错类型 "(start: number) => void" 到类型 "number" 的转换可能是错误的,因为两种类型不能充分重叠。如果这是有意的,请先将表达式转换为 "unknown"。
//真的是崩溃,是我文档看的不行吗😂
counter.interval = 123;//报错 类型“(start: number) => void”上不存在属性“interval”
counter.reset = function () { };
return counter;
}
let c = getCounter();
c(10);
c.reset();
c.interval = 5.0;
这个接口里面定义函数加上函数的属性变量混合类型,是不是不能加泛型啊,要么就不能写成函数形式,写成类?
请大佬指条明路啊,我感觉我的官方文档是个假的😂,有好的文档推荐也可以贴出来
这么改就好了
不采用类型断言,会触发 ts 的隐式推断,判断类型为
(start: number) => void
所以会报对应错误