首页 > 解决方案 > 属性“zeroValue”没有初始值设定项,也没有在构造函数中明确分配

问题描述

我正在学习打字稿,这段代码与泛型(泛型类)相关,并且存在于打字稿的文档中。有什么问题?

class GenericNumber 
{ 
    zeroValue: T; 
    add: (x: T, y: T) => T; 
}

let myGenericNumber = new GenericNumber(); 
myGenericNumber.zeroValue = 0; 
myGenericNumber.add = function(x, y) 
{ 
    return x + y; 
};

错误:属性 'zeroValue' 没有初始化程序,并且未在构造函数中明确分配。 ts(2564)

标签: typescriptclassobjectgenericsarguments

解决方案


首先,分享您的 TypeScript 代码的最佳方式是在TypeScript 游乐场上发布它

我想你在谈论这个例子

// you missed generic initializer
class GenericNumber<T> { // you missed generic initializer
// here TS compiler throws error because you only defined a type of class
// property, but you did not initialize it
    zeroValue: T; 

    add: (x: T, y: T) => T;
}

let myGenericNumber = new GenericNumber<number>(); // you missed generic initializer
myGenericNumber.zeroValue = 0;
myGenericNumber.add = function (x, y) {
    return x + y; // no error
};

工作示例

class GenericNumber<T> {
// to get rid of  error, you can define constructor 
// which takes [zeroValue] and [add] as arguments
    constructor(public zeroValue: T, public add: (x: T, y: T) => T){
        this.zeroValue = zeroValue;
        this.add = add;
    }
}
const zeroValue = 0;
let myGenericNumber = new GenericNumber<number>(zeroValue, (a,b)=>a+b);
const result = myGenericNumber.add(40,2) // 42

确保你的函数不处理this,因为在这种情况下你应该处理它


推荐阅读