声明变量类型

时间:2016-08-10 11:56:23

标签: typescript typescript2.0

我正在设置一个非常基本的打字稿项目,并在声明变量类型时遇到看似无关的错误。我试图表达一个变量可以是一个字符串,或者是null,或者是未定义的变量[编辑]我知道这是字符串的默认值,我试图表达这一点。使用typescript 2.0的非可空类型。这是波浪线和错误的屏幕截图:

error

代码(由“^^^^”s表示的违规代码):

var testMessage: string | null | undefined;
                          ^^^^   ^^^^^^^^^
class TestClass {
testMessage: string | null | undefined;
                      ^^^^   ^^^^^^^^^
    constructor() {
    }
}

错误讯息: “预期类型。算术运算的左侧必须是'any','number'或枚举类型。”

对于单个变量和类中的变量,错误是相同的,并且错误的唯一区别在于它对未定义的条目说“右侧”。

我正在使用VSCode 1.4.0。 我的文件夹结构是一个'src'和一个'dist'文件夹并排放置在我的tsconfig.json和npm包文件所在的封闭项目根文件夹中。 我有tsc看'src'文件夹并在保存时重新编译。 我使用'npm install -g typescript @ next',但'typescript @ beta'和'typescript@2.0'也是如此。 无论是否将我的工作区设置设置为从其全局安装目录中获取tsdk,都会发生此错误。 我的tsconfig.json看起来像这样:

{
"compilerOptions": {
    "outDir": "./dist/",
    "sourceMap": true,
    "noImplicitAny": true,
    "module": "commonjs",
    "target": "es5",
    "rootDir": "./src",
    "watch": true,
    "pretty": true,
    "strictNullChecks": true
    }
}

昨天以这种方式声明变量类型在另一个项目上正常工作,但现在该项目也有此错误。有谁知道造成这种情况的原因以及如何解决这个问题?

[编辑:我的困惑的背景] 这会在typescript 2.1 / typescript @ next:

下的另一台机器上引发错误
export class SomeClass {
    constructor(public someParameter:     string | undefined,
                public someOtherParamter: string | undefined = undefined ) {
        //Some constructor code here
    }

    someFoo (someParam: SomeClass | SomeExtendedClass) : SomeOtherClass 
    {
    //some code here
    }
}

2 个答案:

答案 0 :(得分:1)

回答我自己的问题,因为唯一的其他答案与我的问题的原因无关。

我的问题中的语法在typescript版本2.1.0-dev.20160810下是有效和正确的(你在撰写from typescript @ next时得到的)。问题来自我期待

'npm link typescript '

将我刚安装的新版本的打字稿与'npm install typescript @ next'链接起来。相反,它链接了默认安装的typescript版本(在我的情况下为1.8)。它是通过输入

来修复的

'npm link typescript @ next '。

我尝试从npm重新安装typescript @时遇到了解决方案,并抱怨由于符号链接而无法更新。

答案 1 :(得分:0)

在打字稿中,你没有像那样声明你的变量。你可以这样说。

 var name : String;

这也可以是null或undefined,很明白,当你有一个变量时,它可能还没有被使用,因此不能保存一个值(所以它可以是null或undefined)。因此,在其他语言中,您可以获得所有NullpointerExceptions

错误背后的含义

错误告诉你的是,你正试图在那时使用artihmetic操作。因为Typescript语法不支持您尝试执行的操作,因此它会尝试将您正在执行的操作解析为算术表达式。您正尝试将表达式string | null | undefined的结果分配给变量testMessage。这个'等式'对打字稿是没有意义的。你写的是bitwise OR operation