在NPM模块中我使用typescript
"devDependencies": {
"@types/node": "^8.0.0",
"typescript": "^2.8.1"
}
我希望使用公共方法返回一个私有可空参数。请参考下面的示例。 我看到的错误是
Property 'string1' has no initializer and is not definitely assigned in the constructor.
如果我在构造函数中指定了undefinded,则会收到错误
[ts]
Type 'string | undefined' is not assignable to type 'string'.
Type 'undefined' is not assignable to type 'string'
我应该如何在打字稿中这样做,我来自c#侧:)
export class HowToDoThis {
private string1?: string;
public constructor() {
//this.string1 = undefined;
}
public add2String1(content: string) {
this.string1 += content;
}
public getString1(): string {
return this.string1;
}
}
答案 0 :(得分:1)
您可以定义
private string1: string | undefined;
答案 1 :(得分:1)
您收到的错误消息Type 'string | undefined' is not assignable to type 'string'
不是因为您在构造函数中指定了this.string = undefined
,而是因为您将getString1()
定义为返回string
并且您没有检查this.string1
实际上是否为字符串。
你可以改变getString1()
所以它实际上总是返回一个字符串,或者你可以让它返回string|undefined
,或者更简单你只需要将string1
初始化为一个空字符串从来没有未定义过。
这样可行:
export class HowToDoThis {
private string1?: string;
public constructor() {
this.string1 = undefined;
}
public add2String1(content: string) {
this.string1 += content;
}
public getString1(): string {
return this.string1 || "";
}
}
但是如果只是因为调用add2String1('foo')
不会给你字符串'undefinedfoo'
,那会更好:
export class HowToDoThis {
private string1: string = "";
public add2String1(content: string) {
this.string1 += content;
}
public getString1(): string {
return this.string1;
}
}
这是最好的(不要在typescript中使用getter函数,如果在访问属性时需要执行某些操作,可以随后创建get
属性):
export class HowToDoThis {
public string1: string = "";
public add2String1(content: string) {
this.string1 += content;
}
}
答案 2 :(得分:0)
不确定你想做什么?你为什么要这个未定义?我不认为你想用“未定义”来连接内容。
所以使用:
private string1 = "";
或
private string1: string;
public constructor() {
this.string1 = "";
}