Typescript对象属性类型

时间:2018-08-29 11:51:16

标签: typescript typescript-typings

我有一个像这样的函数调用:

$xml = simplexml_load_file("data.xml");
$child = $xml->GetProduct->addChild("NewNode", "UN9TD72U");
$xml->asXML("curlrequestcategories.xml");

有什么方法可以在不先声明的情况下向要传递给函数的对象添加类型?

还有另一个问题,是否有办法使this.functionProperty()知道该对象是对象?悬停时使用VSCode不能将关键字this识别为对象。

1 个答案:

答案 0 :(得分:1)

如果使用编译器选项noImplicitThis,则this将在对象文字函数内正确键入。

function myFunction<T>(o: T) {

}

var myVar = myFunction({
    property: 'prop',
    functionProperty() {
        console.log(this.property);
    },
    functionProperty2() {
        this.functionProperty();
        this.missing // error

    }
});

如果您需要更多地控制this类型,可以使用ThisType,它是编译器的特殊标记,它将告诉编译器this的类型是什么在对象文字函数内部(但这也需要noImplicitAny)。

function myFunction<T>(o: T & ThisType<T & { extra: boolean }>) {

}

var myVar = myFunction({
    property: 'prop',
    functionProperty() {
        console.log(this.property);
    },
    functionProperty2() {
        this.functionProperty();
        this.missing // error
        this.extra //ok
    }
});