具有函数属性的接口之间有什么区别,例如" f()"和" f :()=>"?

时间:2017-06-05 11:46:59

标签: typescript

考虑下一个A和B接口:

interface A {f(): number}
interface B {f: () => number}

我已尝试过下一步:

var a: A = {f: function() {return 1}}
var a: A = {f: () => 1}
var b: B = {f: function() {return 1}}
var b: B = {f: () => 1}

看起来一样。

2 个答案:

答案 0 :(得分:2)

他们是一样的。它们只是两种不同的符号。您的接口说必须有一个属性let fileUrl = NSURL(fileURLWithPath: (posts.value(forKey: "image_path") as! [String])[indexPath.row]) print(fileUrl as Any) // here i can get path if FileManager.default.fileExists(atPath: (fileUrl)// nil value { let url = NSURL(string: (posts.value(forKey: "image_path") as! [String])[indexPath.row]) // Here url found nil let data = NSData(contentsOf: url! as URL) cell.LocationImage?.image = UIImage(data: data! as Data) } ,这是一个没有参数返回数字的函数。

f{f: function() {return 1}}是实现此接口的两种方法。唯一的区别是第二个使用arrow function。这主要是合成糖,但使用{f: () => 1}关键字略有不同。

答案 1 :(得分:1)

此:

interface A { f(): number }

是用于声明方法的符号,并且:

interface B { f: () => number }

是如何声明函数类型的属性。

虽然在界面上没有真正的区别,但在课堂上更有意义:

class MyClass {
    fn1() {
        return 0;
    }

    fn2 = () => {
        return 0;
    }

    fn3 = function () {
        return 0;
    }
}

编译为:

var MyClass = (function () {
    function MyClass() {
        this.fn2 = function () {
            return 0;
        };
        this.fn3 = function () {
            return 0;
        };
    }
    MyClass.prototype.fn1 = function () {
        return 0;
    };
    return MyClass;
}());

正如您所看到的,只有fn1是附加到原型的方法,而其他两个只是属性(在构造函数中分配)。