属性“长度”的类型不兼容。类型“4”不可分配给类型“1”
Posted
技术标签:
【中文标题】属性“长度”的类型不兼容。类型“4”不可分配给类型“1”【英文标题】:Types of property 'length' are incompatible. Type '4' is not assignable to type '1' 【发布时间】:2018-09-08 20:30:05 【问题描述】:我目前正在学习 typescript / angular,无法弄清楚为什么 TSLint 将其作为错误抛出,但是代码本身可以工作并显示在浏览器中。
export class GreetingComponent implements OnInit
names: [ name: string ] = [ name: 'Tom' , name: 'Dave' , name: 'Katie' , name: 'John' ];
constructor()
ngOnInit()
具体是一行:
names: [ name: string ] = [ name: 'Tom' , name: 'Dave' , name: 'Katie' , name: 'John' ];
完全错误:
[ts]
Type '[ name: string; , name: string; , name: string; , name: string; ]' is not assignable to type '[ name: string; ]'.
Types of property 'length' are incompatible.
Type '4' is not assignable to type '1'.
(property) GreetingComponent.names: [
name: string;
]
【问题讨论】:
【参考方案1】:类型:
[name: string]
是一个元素的tuple type。所以该类型只能是一个包含单个项目的数组。如果您希望类型是填充了这些对象的任意长度的数组,则可以写为
name: string[]
// Or if you prefer:
Array<name: string>
【讨论】:
啊完美。那改变了吗?它不在我的教程中,添加 const ''' export const PEOPLE [] = [ name: 'Tom' , name: 'Dave' , name: 'Katie' , 名称:'约翰'];''' 就我而言,在类似的问题中,只有第二个版本有效(Array 都是斯威夫特的错。【参考方案2】:在这种情况下:
names: [ name: string ] = [ name: 'Tom' , name: 'Dave' , name: 'Katie' , name: 'John' ];
你应该这样写:
names: name: string [] = [ name: 'Tom' , name: 'Dave' , name: 'Katie' , name: 'John' ];
对于第二个版本的代码,它会运行良好。
【讨论】:
以上是关于属性“长度”的类型不兼容。类型“4”不可分配给类型“1”的主要内容,如果未能解决你的问题,请参考以下文章
与 Typescript 反应:“never[]”类型的参数不可分配给“StateProperties |”类型的参数(() => 状态属性)'
TS2416:“MyGuard”类型中的属性“canActivate”不可分配给基类型“CanActivate”中的相同属性
错误 TS2416:“ApolloError”类型中的属性“originalError”不可分配给基类型“GraphQLError”中的相同属性
TypeScript 2.4.1 -> fontWeight -> 类型 'number' 不可分配给类型 '"inherit" | 400 |