我怎么能在打字稿中返回一个可以为空的值

时间:2018-04-17 09:11:04

标签: typescript nullable

在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;
    }
}

3 个答案:

答案 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 = "";
}