首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >让f:F =f和‘let f= <F>f`的区别是什么?

让f:F =f和‘let f= <F>f`的区别是什么?
EN

Stack Overflow用户
提问于 2017-01-25 18:22:34
回答 2查看 45关注 0票数 3

我有以下代码:

代码语言:javascript
复制
interface F {
    (): string;
    a(): number;
}

function f() {
    return '3';
}

f['a'] = function () {
    return 3;
};

然后我想给一个变量赋值一个函数。我可以这样做:

代码语言:javascript
复制
let z = <F>f; // works

或者像这样:

代码语言:javascript
复制
let y: F = f; // doesn't work

有什么关系呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-25 18:27:33

根本的问题是,f只是一个函数,您试图将它当作接口的一个实例来使用。(我认为这很好,它与接口兼容,只是语法问题。)

这很好:

代码语言:javascript
复制
let z = <F>f; // works

...because --它使用强制转换告诉TypeScript,尽管f只是TypeScript所知道的一个函数,但您更了解它,并且它与接口F兼容。然后,类型推断起作用,并将类型F分配给z,因为分配的右侧是F类型。

但这一点:

代码语言:javascript
复制
let y: F = f; // doesn't work

不工作,因为它将y声明为F类型,然后将函数分配给它。该函数不是F类型的,因此分配失败。

票数 3
EN

Stack Overflow用户

发布于 2017-01-25 18:32:34

我就是这样做的:

代码语言:javascript
复制
interface F {
    (): string;
    a(): number;
}

function f() {
    return '3';
}

let f1 = f as F;
f1.a = function () {
    return 3;
};

(操场密码

使用as F等同于<F>,它被称为类型断言

编辑

是的,可以将f定义为F类型,如下所示:

代码语言:javascript
复制
let f3 = function() {
    return "3";
} as F;

f.a = function () {
    return 3;
};

或者使用箭头函数:

代码语言:javascript
复制
let f = (() => {
    return "3";
}) as F;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41858843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档